Arkady Klimov (klimovark@mail.ru)
Thu, 9 Dec 1999 13:51:11 +0300
Было бы неплохо кое-где слегка прокомментировать.
Я попытаюсь это сделать. И вопросы задать.
----- Original Message -----
From: Andrey Slepuhin <pooh@msu.ru>
To: <refal-plus@botik.ru>
Sent: Wednesday, December 08, 1999 7:20 PM
Subject: About new Refal+ release
> День добрый всем!
>
> Я закончил работу над очередной версией Рефала+. То есть
> дистрибутив под Linux можно выложить в любое время. Однако
> я хочу задержать выкладывание дистрибутива до тех пор, пока
> Сергей (Битюков) не проверит, что под Windows все работает
> нормально. Заодно я хочу сделать анонс того, что я добавил,
> чтобы было время все осмыслить и высказать замечания (если
> таковые имеются).
>
> 1) Case-sensitivity.
> Новая версия Рефала+ по умолчанию является case-sensitive.
> Старые программы можно компилировать с ключиком -u (поднять
> имена в верхний регистр). Для новых программ есть два варианта
> работы со стандартными модулями:
> а) Имена стандартных модулей и имена функций записываются
> большими буквами;
> б) Имена стандартных модулей и имена функций записываются
> в mixed-case в соответствии с тем, как было описано в
> одном из моих предыдущих писем.
> Никаких опций компилятору задавать не требуется - имена
> распознаются автоматически. При этом нельзя, скажем, писать
> имена модулей большими буквами, а имена функций в mixed-case.
Не слишком ли умный становиться компилятор? Боюсь это еще нам боком выйдет.
>
> 2) Генерация виртуального кода.
> Новая версия Рефала+ может генерировать виртуальный код. Для
> этого нужно указать опцию -vc. Сгенерированный виртуальный код
> будет выведен в файл с расширением .rvc (Refal Virtual Code) в
> виде объектного выражения, которое может затем быть считано
> одним вызовом функции Read. Виртуальный код соответствует описанию
> в статье "Принципы реализации Рефала+") со следующими расширениями:
> а) Новые команды LEIS/LVIS/LES,REIS/RVIS/RES - семантика
> следующая (на примере LEIS/LVIS/LES):
> < LEIS m : LES : C, S, D, E > =>
> { S/m = Oe и Oe : S =S' } < C, S', (LES : C, S') : D, E>
> < LVIS m : LES : C, S, D, E > =>
> { S/m = Oe } < LES : C, Oe : S, D, E>
> < LES : C, OtOe' : S, D, E > => { Oe' : S = S' } < C, S', (LES :
> C : S') D, E>
> < LES : C, p : S, D, E > => < FAIL : [], S, D, E>
- это оптимизированные команды удлинения. Используются в случае, когда
просмотренная часть (e1 в образце e1 sA e2) далее в теле функции не
используется.
(Если конечно, я это правильно понял. Андрей, поправь меня, если это не
так).
> б) Новые команды:
> PUSHEMP == PUSHQ []
- положить пустое выражение на стек
> PUSHBR m == PUSH m; BR
- вытащить m-й эл-т стека, взяв его в скобки
> MOVE -
> < MOVE m n : C, Oe_0 : ... : Oe_n : S, D, E > =>
> < C, Oe_0 : ... : S/m : S, D, E >
- на место n-го эл-та стека поставить (n+1+m)-й (Странный номер! наверно,
не S/m, а ... ?)
> MOVEQ -
> < MOVEQ n Oe : C, Oe_0 : ... : Oe_n : S, D, E > =>
> < C, Oe_0 : ... : Oe : S, D, E >
- поместить данное объектное выражение в стек в n-ю позицию (взамен старого
n-го эл-та)
> MOVEEMP == MOVEQ []
- непонятно ( не хватает числа n )
> SWAP -
> < SWAP m n : C, Oe_0 : ... : Oe_m : ... : Oe_n : S, D, E > =>
> < C, Oe_0 : ... : S/n : ... : S/m : S, D, E >
- совсем непонятно. (Вообще-то, когда пишешь для людей, лучше использовать
русский язык).
И обязательно ли, что m<n?
>
> FUNFAIL Fname == PUSHQ Fname "Unexpected fail"; ERROR
> FUNEND == NOP , но всегда в конце функции.
>
> в) Директивы:
> IMPORT/EXPORT/LOCAL FUNC/BOX/TABLE/VECTOR/STRING/CHANNEL -
> семантика очевидна.
А какой синтаксис? (Речь идет ведь не о рефале, а о виртуальном коде, да?)
Какая семантика LOCAL FUNC (в отличие от FUNC)? Это два слова?
>
> 3) Функции ввода-вывода теперь правильно работают с символами-ссылками
Есть ли возможность управлять таблицей соответствий имя-ссылка (задать ее
начальное содержимое, например)? Получить ее конечное содержимое? Является
ли композиция ввод;вывод тождественной операцией. (Хотя бы на тех файлах,
которые сами получены выводом).
>
> 4) Подключен "дырявый" рефал и исправлены в нем ошибки. "Дырявость"
> контролируется переменной среды RFP_HOLECTRL, значение которой
> имеет вид
> RFP_HOLECTRL=l;r;s
> где l - процент дырок слева, r - процент дырок справа, s -
> минимальная длина результирующего выражения, для которой дырки
> разрешены. По умолчанию Рефал+ работает в "не дырявом" режиме.
"Процент дырки" - доля в процентах, которую составляет размер дырки от
размера самого выражения (?).
>
> 5) Теперь любую откомпилированную рефал-программу можно запускать
> со следующими опциями:
> -rfp-heapsize <n> - задает размер heap'а в байтах
> -rfp-stacksize <n> - задает размер стека в байтах
> -rfp-lholes <n> \
> -rfp-rholes <n> | - задают "дырявость"
> -rfp-minholes <n> /
> -rfp-memstat - разрешают печать статистики использования
> памяти после окончания программы.
>
> 6) Разрешены комментарии, начинающиеся на //
>
> Всего доброго,
> Андрей.
>
>
Спасибо,
Аркадий.
This archive was generated by hypermail 2.0b3 on Thu Dec 09 1999 - 13:49:55 MSK