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