Re: About new Refal+ release


Arkady Klimov (klimovark@mail.ru)
Thu, 9 Dec 1999 15:45:47 +0300


Андрей,

----- Original Message -----
From: Andrey Slepuhin <pooh@msu.ru>
To: Arkady Klimov <klark@bagirra.rinet.ru>
Cc: <refal-plus@botik.ru>
Sent: Thursday, December 09, 1999 2:32 PM
Subject: Re: About new Refal+ release

> > >
> > > 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) далее в теле функции не
> > используется.
> > (Если конечно, я это правильно понял. Андрей, поправь меня, если это не
> > так).
>
> Абсолютно точно. На самом деле я бы кое-что поменял в командах
> отщепления - уж больно они запутанные, и мне совсем не нравится
> требование, чтобы LEI/LE всегда были рядом. На самом деле все
> можно сделать более прозрачно с явными ALT'ами, и обойтись вообще
> без команд типа LEI. Если что - я могу подробно описать то, как я
> все это вижу.
Да, это интересно. Если получается, это будет, наверно, лучше. Напиши,
пожалуйста.

> >
> > > 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-й элементы местами.
>
> > И обязательно ли, что m<n?
>
> Нет конечно. Я просто не знаю, как это правильно записать формально.
Наверно, можно так: { S'/m = S/n и S'/n = S/m и (если k/=m и k/=n то
S'/k=S/k) }
Формально еще хорошо бы написать что-то вроде size(S)=size(S'), но можно
это и замять, полагая. что из (для всех k: S/k=S'/k) это следует.

> > >
> > > FUNFAIL Fname == PUSHQ Fname "Unexpected fail"; ERROR
> > > FUNEND == NOP , но всегда в конце функции.
> > >
> > > в) Директивы:
> > > IMPORT/EXPORT/LOCAL FUNC/BOX/TABLE/VECTOR/STRING/CHANNEL -
> > > семантика очевидна.
> > А какой синтаксис? (Речь идет ведь не о рефале, а о виртуальном коде,
да?)
> > Какая семантика LOCAL FUNC (в отличие от FUNC)? Это два слова?
>
> Просто FUNC нету. Т.е. синтаксис директивы _всегда_ содержит два
> слова - linkage class (не знаю, как это сказать по русски) и тип
> объекта.
> Это как раз спорное место, которое я хотел обсудить. Не стоит ли разбить
> каждую директиву на две?
Ох, я совсем ничего не понял, можно поподробнее?

>
> > >
> > > 3) Функции ввода-вывода теперь правильно работают с
символами-ссылками
> > Есть ли возможность управлять таблицей соответствий имя-ссылка (задать
ее
> > начальное содержимое, например)? Получить ее конечное содержимое?
Является
> > ли композиция ввод;вывод тождественной операцией. (Хотя бы на тех
файлах,
> > которые сами получены выводом).
?

Аркадий.



This archive was generated by hypermail 2.0b3 on Thu Dec 09 1999 - 15:44:49 MSK