Re: About new Refal+ release


Arkady Klimov (klark@bagirra.rinet.ru)
Thu, 9 Dec 1999 18:32:59 +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 4:21 PM
Subject: Re: About new Refal+ release

> Arkady Klimov wrote:
>
> [snip]
>
> > > > > а) Новые команды 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. Если что - я могу подробно описать то, как я
> > > все это вижу.
> > Да, это интересно. Если получается, это будет, наверно, лучше. Напиши,
> > пожалуйста.
>
> LE предлагается изменить следующим образом (я обзову эту команду LX,
> чтобы
> не было путаницы):
> < LX : C, OtOe" : Oe' : S, D, E > => < C, Oe" : Oe'Ot : S, D, E >
> < LX : C, p : Oe : S, D, E > => < FAIL : [], S, D, E >
>
> Тогда пара команд LEI m : LE заменяется на
> PUSHEMP
> PUSH m+1
> JUMP L2
> LABEL L1
> LX
> LABEL L2
> ALT L1
> ...
>
> A LVI m : LE заменяется на
> PUSHEMP
> PUSH m+1
> LABEL L1
> LX
> ALT L1
> ...
>
> Аналогично поступаем с LEIS/LES и с отщеплениями справа.
> Кстати сказать, в реальной жизни так отщепления в ассемблер и
> компилируются.
>
> [snip]
Да, это очень красиво. Мне нравится.

>
> > > > > в) Директивы:
> > > > > IMPORT/EXPORT/LOCAL FUNC/BOX/TABLE/VECTOR/STRING/CHANNEL -
> > > > > семантика очевидна.
> > > > А какой синтаксис? (Речь идет ведь не о рефале, а о виртуальном
коде,
> > да?)
> > > > Какая семантика LOCAL FUNC (в отличие от FUNC)? Это два слова?
> > >
> > > Просто FUNC нету. Т.е. синтаксис директивы _всегда_ содержит два
> > > слова - linkage class (не знаю, как это сказать по русски) и тип
> > > объекта.
> > > Это как раз спорное место, которое я хотел обсудить. Не стоит ли
разбить
> > > каждую директиву на две?
> > Ох, я совсем ничего не понял, можно поподробнее?
>
> Я сделал так - возьмем для примера функцию, для нее возможны
> три директивы:
> IMPORT FUNC <fname> - функция определена где-то в другом модуле
> EXPORT FUNC <fname> - функция определена в нашем модуле и является
> глобальной
> LOCAL FUNC <fname> - функция определена в нашем модуле и является
> локальной
>
> То же самое для других объектов, для них, кроме того, объявления EXPORT
> и
> LOCAL являются сразу и определениями.
> Другой возможный вариант - разнести это по разным директивам. Тогда
> мы будем писать, скажем
> BOX <name>
> EXPORT <name>
>
> Почему я объединил определение объекта и его linkage вместе?
> Потому что тогда очень легко по одной директиве сразу построить
> необходимое объявление при компиляции, скажем в С, да и виртуальный код
> меньше загромождается. Например:
> IMPORT BOX Box =>
> extern rf_box_t Box;
> EXPORT BOX Box =>
> rf_box_t Box;
> LOCAL BOX Box =>
> static rf_box_t Box;
>
> Однако, здесь могут быть другие мнения, и я с радостью их
> выслушаю.
Выглядит разумно.
>
> Всего доброго,
> Андрей.
Спасибо.
Аркадий.



This archive was generated by hypermail 2.0b3 on Thu Dec 09 1999 - 18:31:32 MSK