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

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


Сообщения - akron1

Страницы: 1 [2] 3 4 ... 6
16
Общий раздел / Re: [Oberon rev 2013] CASE
« : Ноябрь 06, 2013, 01:18:45 pm »
Ну а почему здесь должен быть HALT?
Ведь раз CASE OF просто синтаксических сахар для IF-ELSIF, то этот код эквивалентен такому:
x := 42;
IF    x = 1 THEN ret := int
ELSIF x = 2 THEN ret := real
ELSIF x = 3 THEN ret := char
END
Тут же всё в порядке, ветка ELSE не является обязательной...
А вот компилятор Astrobe считает что должен быть HALT

17
Общий раздел / Re: Открытые массивы в O7
« : Сентябрь 20, 2013, 08:04:08 am »
Причем неоткрытый массив прописать нельзя. Соответственно вот такой код невалиден:
PROCEDURE p(a: ARRAY 3 OF INTEGER); (* валидно в ББ *)

А попробуйте вызвать такую процедуру в ББ.

PROCEDURE p(a: ARRAY OF ARRAY OF INTEGER); (* невалидно в ББ *)

С точки зрения компилятора тут присутствует дополнительное усложнение в вычислении нужного смещения в памяти (если массив реализован через кусок памяти). Поэтому, видимо, оно и запрещено в ББ. Тем не менее Вирт решил это разрешить...

Странно... Проверил это в ББ (1.6-rc6 красноярская сборка) -- компилирует.

18
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 09:38:22 pm »
Причины запрета экспорта структурных переменных тоже не вижу... Разве что ослабляются межмодульные связи, м. б. чем-то упрощается раздельная компиляция и динамическая модульность. Скалярный ли тип указатель? Скорее да, собственной структуры у него нет.

19
Общий раздел / Re: Пробуем писать на O7
« : Сентябрь 07, 2013, 06:41:39 pm »
  CONST
    Create   = VectorInt.Create;
    Len      = VectorInt.Len;
    PushBack = VectorInt.PushBack;
    PopBack  = VectorInt.PopBack;
    Get      = VectorInt.Get;
    Make3    = VectorInt.Make3;
    Make2    = VectorInt.Make2;

Мне не кажется это хорошим решением. Псевдонимы нужны не только для процедур, но и для переменных и типов. Объявление CONST будет выглядеть странно (даже если формально (!) это не противоречит репорту). Если уж расширять язык, то лучше, наверное, разделить объявление собственно констант и псевдонимов. Может быть так:

MODULE Foo;
IMPORT Out;

ALIAS
  outs = Out.String;
...

CONST
...
TYPE
...
VAR
...
BEGIN
...
END Foo.

20
Общий раздел / Re: [Oberon-07/11] RECORD&POINTER export.
« : Сентябрь 04, 2013, 04:33:20 pm »
Только сейчас подумал о том, что такие путаные правила экспорта возможно обусловлены стремлением упростить инструмент генерации def-файлов, ведь тогда такой инструмент сводится к простому цитированию фрагментов модуля:

MODULE M;
TYPE
 R*  = RECORD foo*, foo2 : INTEGER END;
 P* = POINTER TO R;
END M.

DEFINITION M;
TYPE
 R  = RECORD foo : INTEGER END;
 P = POINTER TO R;
END M.

А если тип-запись не экспортируется, но при этом экспортируются его поля, то как тогда создать def? Ну, а если def-файлы в принципе не нужны, то тогда можно упростить правила и лепить метки экспорта где угодно.

21
Общий раздел / Re: [Oberon-07/11] RECORD&POINTER export.
« : Сентябрь 04, 2013, 03:22:05 pm »
Гм. А как на счет вот такого примера:
MODULE M;
TYPE
 R  = RECORD foo* : INTEGER END;
 P* = POINTER TO R;
END M.

Репорт:
6.3 Record types

...
If a record type is exported, field identifiers that are to be visible outside the declaring module must
be marked.

Т.е., если тип-запись не экспортируется, то его поля не должны экспортироваться.


22
Общий раздел / Re: Пробуем писать на O7
« : Август 27, 2013, 08:24:46 pm »
Итак, на входе массив массивов и разделитель.
ARRAY OF ARRAY OF INTEGER это не массив массивов, а двумерный массив. В оберонах массив массивов это
ARRAY OF POINTER TO ARRAY OF INTEGER. Да, в репорте O7 нет указателей на массивы и динамических массивов, ну значит их следует добавить, на практике они нужны.

Даёшь дженерики! Даёшь инициализацию массивов!! Даёшь динамические массивы!!! )))
С динамическими массивами все понятно, а про дженерики много разговоров, но пока я не видел описание синтаксиса и семантики дженериков для оберона. Возможно, следует обсудить синтаксис и семантику дженериков (я в этом вопросе слабо разбираюсь).

23
Переписал редактор на обероне. Исходный код получился страшный -- я никогда раньше не писал GUI на winapi, к тому же сильно мешало отсутствие вшитой в язык поддержки юникода (в моей реализации) и отсутствие в языке операции конкатенации (не говоря уж о типе string). Но каким-то образом оно работает)). Немного расширил и доопределил язык. Усовершенствовал работу с вещественными числами. До промышленных компиляторов, конечно все равно далеко, но все-таки вещественная арифметика стала в несколько раз эффективнее. https://sites.google.com/site/oberon07compiler/versii

24
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Июнь 25, 2013, 02:16:08 am »
Автокапс срабатывает, если слово набрано полностью строчными буквами, и введенный после слова символ принадлежит множеству {[space]  [enter]  '('  ')'  ','  ';'  '|'}. Автокапс не срабатывает внутри строковых констант и комментариев.

Да, кстати, насчет строковых констант: online-редактор подсвечивает строки ярко-красным цветом, как незавершенные, если строковая константа находится в конце строки (после нее нет пробела либо другого символа), а также он подсвечивает строки, заключенные в апострофы (в 07/11 строки записываются только в кавычках).

25
Общий раздел / Re: 1С - One Ass
« : Май 31, 2013, 07:48:01 am »
Kemet, нет, точка с запятой после RETURN не допускается:

ProcedureBody = DeclarationSequence [BEGIN StatementSequence]
[RETURN expression] END.

После RETURN expression сразу END, RETURN в O7 не оператор.

26
Скажите, а европейцы знают о том, что Вы причисляете себя к ним? о_О
Для европейцев все русские -- азиаты...

Это ничего не меняет, во всяком случае монголоидом я от этого не стану.

27
Если что, белая раса по современной терминологии называется Caucasian race - кавказцы короче :-) Туда входят и гм.. славяне, и евреи, и натуральные грузины, и германцы и так далее.
Это называется не белая раса, а "большая европейская"

28
Я понимаю под славянами все народы с белым цветом кожи. Проще говоря, белую расу.

А я понимаю белую расу как белую расу, как европейцев к которым сам отношусь. Термин "славяне" считаю ругательством. Что до христианства, то оно мне претит уже тем, что оно неевропейское.

29
Я исхожу из того, что славяне - очень древний и духовный, светлый народ.

Что за народ такой "slave'яне"? Есть народЫ говорящие на языках славянской группы, но имеющие разное происхождение, разную историю и разную религию (как древнюю, так и современную). Языковая общность это только языковая общность (не называть же жителей Гарлема германцами). Достаточно нескольких поколений, чтобы какая-либо народность полностью перешла на другой язык. Причем, как покоренный народ может перейти на язык своих завоевателей, так и наоборот (германские племена завоевали Галлию (Францию), но затем перешли на язык галлов). Кто у кого перенял язык в этой "славянской общности" еще вопрос, но несомненно, что "slave'янство" является скорее политическим инструментом, чем этнической общностью.

30
Общий раздел / Re: Blur на разных ЯП.
« : Май 11, 2013, 08:00:28 pm »
Обнаружил ошибку в сравнении целых

MODULE test;
IMPORT JS;
VAR x: INTEGER;
BEGIN
    x := 10;
    IF x >= 0 THEN
      JS.alert("TRUE")
    ELSE
      JS.alert("FALSE")
    END
END test.

строка
IF x >= 0 THEN

транслируется так
if (RTL$.setInclR(x, 0))

и естественно не работает как надо, похоже, что компилятор применяет операцию ">=" перегруженную для множеств.
Операции ">" и "<" для целых не работают вообще, пишет: TypeError: Cannot call method 'replace' of undefined.
Кстати операции ">=" и "<=" для множеств тоже работают неправильно:
MODULE test;
IMPORT JS;
VAR s1, s2: SET;
BEGIN
    s1 := {0..5};
    s2 := {0..8};
    IF s1 <= s2 THEN
      JS.alert("TRUE")
    ELSE
      JS.alert("FALSE")
    END
END test.
Программа пишет "FALSE" (должно быть "TRUE")

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