Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - akron1

Страницы: 1 2 [3] 4 5 6
31
Общий раздел / Re: Blur на разных ЯП.
« : Май 04, 2013, 09:34:49 pm »
Не, не вижу - где может быть пустой statement?

statement = [assignment | ProcedureCall | IfStatement | CaseStatement |
WhileStatement | RepeatStatement | ForStatement].


Квадратные скобки видишь?))

32
Общий раздел / Re: Blur на разных ЯП.
« : Май 04, 2013, 06:36:23 pm »
Например:

WHILE func() DO
(* пустой оператор *)
END

Где func -- функция с побочным эффектом, например читает данные из файла, выполняет их обработку и возвращает FALSE, если достигнут конец файла.

33
Общий раздел / Re: Blur на разных ЯП.
« : Май 04, 2013, 05:27:33 pm »
Oberon-07/11

Кстати, к вопросу о совместимости разных реализаций. Приведенный пример не соответствует репорту языка синтаксически - пресловутые "лишние" точки с запятой. Могу долго рассказывать, что я об этом думаю... но не буду. Просто замечу.

Цитата из репорта:

statement = [assignment | ProcedureCall | IfStatement | CaseStatement |
WhileStatement | RepeatStatement | ForStatement].
...
StatementSequence = statement {";" statement}.

Из этого следует, что statement может быть пустым, значит лишние ";" не являются ошибкой, они просто необязательны.

34
Общий раздел / Re: Blur на разных ЯП.
« : Апрель 25, 2013, 06:42:54 pm »
Oberon-2
<*+ MAIN *>

MODULE Blur;

  IMPORT Out;

    CONST

        W = 640; W1 = 640 - 3;
        H = 480; H1 = 480 - 3;
        N = 13;
        Frames = 100;

    TYPE

        INTEGER = LONGINT;
        Plane = ARRAY W*3, H OF SHORTINT;

    VAR

        a, b : Plane;

  PROCEDURE Blur2DArray*;
  VAR
    f, n : INTEGER;
    x, y : INTEGER;
    color : INTEGER;
  BEGIN

    FOR f:=1 TO Frames DO
      FOR n:=1 TO N DO

        FOR y:=1 TO H-2 DO
          FOR x:=1 TO W-2 DO
            FOR color:=0 TO 2 DO
              b[x*3+color,y] := (a[x*3+color,y+1]+a[x*3+color,y-1]+a[(x-1)*3,y]+a[(x+1)*3,y]) DIV 4;
            END
          END
        END;

        FOR y:=1 TO H-2 DO
          FOR x:=1 TO W-2 DO
            FOR color:=0 TO 2 DO
              a[x*3+color,y] := (b[x*3+color,y+1]+b[x*3+color,y-1]+b[(x-1)*3,y]+b[(x+1)*3,y]) DIV 4;
            END
          END
        END
      END
    END;
  END Blur2DArray;

BEGIN
  Blur2DArray;
  Out.String("Done");
END Blur.

Oberon-07/11
MODULE Blur;

  IMPORT dt := DateTime, In, Out, RTL;

  CONST
    W = 640; W1 = 640 - 3;
    H = 480; H1 = 480 - 3;
    N = 13;
    Frames = 1;

  TYPE
    Plane = ARRAY W*3, H OF CHAR;

  VAR
    a, b:  Plane;
    time: LONGREAL;

  PROCEDURE Blur2DArray*;
  VAR
    f, n : INTEGER;
    x, y : INTEGER;
    color : INTEGER;
  BEGIN
    FOR f:=1 TO Frames DO
      FOR n:=1 TO N DO
        FOR y:=1 TO H-2 DO
          FOR x:=1 TO W-2 DO
            FOR color:=0 TO 2 DO
              b[x*3+color,y] := CHR((ORD(a[x*3+color,y+1])+ORD(a[x*3+color,y-1])+ORD(a[(x-1)*3,y])+ORD(a[(x+1)*3,y])) DIV 4);
            END
          END
        END;
        FOR y:=1 TO H-2 DO
          FOR x:=1 TO W-2 DO
            FOR color:=0 TO 2 DO
              a[x*3+color,y] := CHR((ORD(b[x*3+color,y+1])+ORD(b[x*3+color,y-1])+ORD(b[(x-1)*3,y])+ORD(b[(x+1)*3,y])) DIV 4);
            END
          END
        END
      END
    END;
  END Blur2DArray;

BEGIN
  In.Open;
  Out.Open;
  time := dt.Now();
  Blur2DArray;
  Out.FixReal(LONG(FLT(Frames))/((dt.Now() - time) * 86400.D0), 20, 5);
  In.Ln;
END Blur.

Oberon-07M
MODULE Blur;

  IMPORT c := Console;

  CONST
    W = 640; W1 = 640 - 3;
    H = 480; H1 = 480 - 3;
    N = 13;
    Frames = 10;

  TYPE
    Plane = ARRAY W*3, H OF CHAR;

  VAR
    a, b : Plane;
    time : INTEGER;

  PROCEDURE ["Kernel32.dll", "GetTickCount", 0] GetTickCount(): INTEGER;

  PROCEDURE Blur2DArray*;
  VAR
    f, n : INTEGER;
    x, y : INTEGER;
    color : INTEGER;
  BEGIN
    FOR f:=1 TO Frames DO
      FOR n:=1 TO N DO
        FOR y:=1 TO H-2 DO
          FOR x:=1 TO W-2 DO
            FOR color:=0 TO 2 DO
              b[x*3+color,y] := CHR((ORD(a[x*3+color,y+1])+ORD(a[x*3+color,y-1])+ORD(a[(x-1)*3,y])+ORD(a[(x+1)*3,y])) DIV 4);
            END
          END
        END;
        FOR y:=1 TO H-2 DO
          FOR x:=1 TO W-2 DO
            FOR color:=0 TO 2 DO
              a[x*3+color,y] := CHR((ORD(b[x*3+color,y+1])+ORD(b[x*3+color,y-1])+ORD(b[(x-1)*3,y])+ORD(b[(x+1)*3,y])) DIV 4);
            END
          END
        END
      END
    END;
  END Blur2DArray;

BEGIN
  time := GetTickCount();
  Blur2DArray;
  time := GetTickCount() - time;
  c.Int(time); c.Ln;
END Blur.

Dephi
program Blur;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

CONST
  W = 640; W1 = 640 - 3;
  H = 480; H1 = 480 - 3;
  NN = 13;
  Frames = 10;

TYPE
  Plane = ARRAY [0..W*3-1, 0..H-1] OF BYTE;

VAR
  a, b : Plane;

  PROCEDURE Blur2DArray;
  VAR
      f, n : INTEGER;
      x, y : INTEGER;
      color : INTEGER;
      i: INTEGER;
  BEGIN
    FOR f:=1 TO Frames DO BEGIN
      FOR n:=1 TO NN DO BEGIN
        FOR y:=1 TO H-2 DO BEGIN
          FOR x:=1 TO W-2 DO BEGIN
            FOR color:=0 TO 2 DO BEGIN
              b[x*3+color,y] := (a[x*3+color,y+1]+a[x*3+color,y-1]+a[(x-1)*3,y]+a[(x+1)*3,y]) DIV 4;
            END
          END
        END;
        FOR y:=1 TO H-2 DO BEGIN
          FOR x:=1 TO W-2 DO BEGIN
            FOR color:=0 TO 2 DO BEGIN
              a[x*3+color,y] := (b[x*3+color,y+1]+b[x*3+color,y-1]+b[(x-1)*3,y]+b[(x+1)*3,y]) DIV 4;
            END
          END
        END
      END
    END;
  END;

var t: Cardinal;
begin
  try
    t := GetTickCount;
    Blur2DArray;
    t := GetTickCount - t;
    Write((Frames/t*1000):20:5);
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

35
Общий раздел / Re: Blur на разных ЯП.
« : Апрель 25, 2013, 06:10:23 pm »
Windows7 sp1, AMD Phenom 9650 2300MHz
TinyC 0.9.24      2.17 fps (реализация Geniepro)
Delphi-2010       4.32 fps
Delphi-2010       2.88 fps (Range checking)
BBCP              1.83 fps
XDS O2            1.82 fps
O-07M (Rifat)     0.37 fps
O-07/11 (akron1)  0.44 fps
O-07/11 (akron1)  0.55 fps (сдвиг вместо деления)

Везде, кроме TinyC 2D array


36
Общий раздел / Re: Строки в О7
« : Март 31, 2013, 12:52:32 pm »
кстати, правильно ли я понял, что фактическую длину строки хранящейся в массиве символов  считать приходится ручками?

Смотря где. В Astrobe есть встроенная функция LENGTH, работает аналогично функции strlen си.

37
Общий раздел / Re: Строки в О7
« : Март 29, 2013, 08:59:53 pm »

Где про это сказано? В репорте сказано лишь, что оно эквивалентно b:=a.
[/quote]

А где сказано, что b и a в COPY(a, b) должны быть одинакового типа? Так что не совсем эквивалентно.

38
Общий раздел / Re: Строки в О7
« : Март 29, 2013, 08:48:37 pm »
PS. А еще я не понимаю сакраментального смысла наличия процедуры COPY в языке, ведь оно делает ровно то же самое, что и простое присваивание строк.

VAR
  a: ARRAY 10 OF CHAR;
  b: ARRAY 20 OF CHAR;

...
b := a; (* так нельзя *)
COPY(a, b); (* так можно *)


39
Общий раздел / Re: Строки в О7
« : Март 29, 2013, 08:00:28 pm »
Так. У меня ощущение складывается, что проблема есть и просто с массивами:

MODULE TestModule;

VAR intArray : ARRAY 8 OF INTEGER;

PROCEDURE Test(VAR arg : ARRAY OF INTEGER);
VAR localArray : ARRAY 100500 OF INTEGER
BEGIN
   arg := localArray
END Test

BEGIN
   Test(intArray)
END TestModule.

Что будет? Так можно вообще? Если да, то почему? Если нет, то тоже почему?

Ошибка компиляции будет, несовместимость по присваиванию. Массивы должны быть одного типа. Для строк сделано исключение из правила.

40
akron1, один знакомый оберонщик попросил уточнить насчёт лицензии на данный компилятор. Он опасается, что если её сейчас нет никакой, то потом ВДРУГ может появиться совсем неудобная (для его нужд).

О лицензии не задумывался... Ну ладно, значит будет GNU GPL со следующей версии.

41
Выложил последнюю версию на гуглосайте https://sites.google.com/site/oberon07compiler и приостановил разработку.

42
И ещё -- планируется ли версия для линупсов/юнипсов?
а вот в линуксах я совершенно не разбираюсь

Поторопился с ответом

А можно нескромный вопрос: поддержка ОС "Колибри" не планируется?

Возможные варианты:

1) Win64
2) Linux
3) Внутреннее представление, оптимизации
4) Транслятор Oberon-07 -> C/C++

С чего начать, пока не выбрал.
Так что и без Колибри есть над чем работать.

Здесь тоже

Вобщем, добавил поддержку Linux и KolibriOS. Осталось только немного допилить поддержку линукс.

43
Очередные недосказанности в репорте...
Думается, нужно сформулировать как-то так:

Правило "только для чтения" действует до первого разыменования указателя в десигнаторе.

Потому что в случае указателей это правило все равно можно легко обойти, просто потребуется написать лишний код:

(* array[i].pointer.field := 123; *)
p := array[i].pointer;
p.field := 123;

44
Компилятор не позволяет такое присваивание в случае если массив передан в функцию "по значению" (не-VAR):
array[i].pointer.field := 123;

Я думаю, что это бага. Вот выдержка из обероновского репорта:
Цитировать
9.1
...
If a value parameter is structured (of array or record type), no assignment to it or to its elements are permitted. Neither may assignments be made to imported variables.

Рекорд, на который ссылается указатель, не является элементом массива - следовательно такое присваивание должно работать.

Спасибо. Надо будет исправить...

45
Хорошо, сделаю. Но только через 1-2 недели.

Страницы: 1 2 [3] 4 5 6