About new Refal+ release


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