Andrey Slepuhin (pooh@msu.ru)
Wed, 08 Dec 1999 19:20:05 +0300
День добрый всем!
Я закончил работу над очередной версией Рефала+. То есть
дистрибутив под 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>
б) Новые команды:
PUSHEMP == PUSHQ []
PUSHBR m == PUSH m; BR
MOVE -
< MOVE m n : C, Oe_0 : ... : Oe_n : S, D, E > =>
< C, Oe_0 : ... : S/m : S, D, E >
MOVEQ -
< MOVEQ n Oe : C, Oe_0 : ... : Oe_n : S, D, E > =>
< C, Oe_0 : ... : Oe : S, D, E >
MOVEEMP == MOVEQ []
SWAP -
< SWAP m n : C, Oe_0 : ... : Oe_m : ... : Oe_n : S, D, E > =>
< C, Oe_0 : ... : S/n : ... : S/m : S, D, E >
FUNFAIL Fname == PUSHQ Fname "Unexpected fail"; ERROR
FUNEND == NOP , но всегда в конце функции.
в) Директивы:
IMPORT/EXPORT/LOCAL FUNC/BOX/TABLE/VECTOR/STRING/CHANNEL -
семантика очевидна.
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 Wed Dec 08 1999 - 19:21:09 MSK