Forth
http://fforum.winglion.ru/

Новый стандарт или чего бы хотелось
http://fforum.winglion.ru/viewtopic.php?f=9&t=99
Страница 7 из 11

Автор:  chess [ Пн сен 18, 2006 15:51 ]
Заголовок сообщения: 

WingLion писал(а):
И зацепиться, чтобы понять, как правильно - незачто!

Если не за что - пиши по-старому.

Автор:  Hishnik [ Пн сен 18, 2006 16:27 ]
Заголовок сообщения: 

chess писал(а):
По существу - сгодится. Однако есть недостаток - объем кода растет(хотя при этом растет быстродействие).


Ну а тут уж выше головы не прыгнуть. Всегда есть какой-то минимальный объем кода, без которого просто не получится.

chess писал(а):
Раньше последовательности DUP-ов SWAP-ов и т.п. были последовательностями ссылок(call) на подпрограммы, теперь это будут inline-вставки кода.

Кстати, инлайнинг можно сделать и в рамках обычной однопроходной компиляции. Например, завести соответствующи флажок для слова и вместо компиляции call на него вставлять непосредственно его тело. Такое я делал. Размер и быстродействие выигрывали.

Автор:  chess [ Вт сен 19, 2006 08:48 ]
Заголовок сообщения: 

Хищник писал(а):
Размер и быстродействие выигрывали.


Насчет быстродействия это верно, насчет размера - верно лишь в случае однократного применения процедуры, тело которой подставляем вместо call. Решением близким к оптимальному будет похоже
использование 2-х процедур(подпрограмм), 1-я - тащит параметр из стека в регистр(для нее
будет 2 параметра - номер ячейки в стеке и номер регистра), 2-я - тащит параметр из регистра в стек(для
нее тоже 2 тех же параметра). Тогда операция со стеком это цикл call(1-я) и цикл call(2-я) c соответствующей установкой указателя стека.

Остановлюсь пока на таком синтаксисе для операций манипуляции на стеке параметров.

1~11 \ dup
2~1212 \ 2dup
2~21 \ swap
1~ \ drop
2~ \ 2drop
2~121 \ over
3~231 \ rot
3~312 \ -rot
4~213 \ 2swap swap 2swap drop
и т.п.

цифра слева от ~ - число параметров на стеке, участвующих в операции, при этом параметр с максимальным номером лежит на вершине стека. Цифру слева от ~ можно трактовать как последнюю цифру
в записи состояния стека перед операцией(например 1234~2134 (2swap swap 2swap) запишется как 4~2134)

Автор:  Kamikaze [ Вт сен 19, 2006 11:46 ]
Заголовок сообщения: 

Тогда уж вместо тильды привычное (для стека) ">"
Т.е.,чтобы ничего не пропустить, заносим все-все-все варианты в таблицы:
2>11 2>12
2>21 2>22
и т.д.
Прописываем их на асме и забываем о SWAP'ах DUP'ах и ROT'ах Так?

Автор:  chess [ Вт сен 19, 2006 12:00 ]
Заголовок сообщения: 

Kamikaze писал(а):
Прописываем их на асме и забываем о SWAP'ах DUP'ах и ROT'ах Так?

НЕ ТАК.
Никаких вариантов в таблицах.
Корректируем парсер и пишем процедуру для компиляции выражений n>...

Автор:  chess [ Вт сен 19, 2006 13:50 ]
Заголовок сообщения: 

Об арифметических и логических операциях.
Например в SPF4:
D2/ D2* D= D0= 0<>
0= 0< U> U< D>
D< > < <> =
FM/MOD SM/REM RSHIFT LSHIFT
M* */MOD 2/ UM/MOD
UMOD /MOD MOD U/
/ UM* C>S U>D D>S
S>D ABS DNEGATE NEGATE
INVERT XOR OR AND *
- D- D+ +
2* 2- 2+ 1- 1+

Так как в Форте типы данных фактически есть - оставить только:
> < <> =
RSHIFT LSHIFT MOD /
ABS NEGATE INVERT XOR OR AND
* - +
ну может быть еще (чтобы не было unsigned-типов)
U> U< U<> U= UMOD U/ U*

Автор:  chess [ Вт сен 19, 2006 15:35 ]
Заголовок сообщения: 

Forth и другие саморасширяющиеся системы программирования
- а нужно-то чтобы была и возможность корректного самосужения :D .

Автор:  WingLion [ Вт сен 19, 2006 16:00 ]
Заголовок сообщения: 

самосужение - это команда FORGET...
Формально, можно сузить и до нуля, но хороший
Форт обычно имеет защиту ядра от FORGET

Автор:  chess [ Вт сен 19, 2006 16:04 ]
Заголовок сообщения: 

WingLion писал(а):
самосужение - это команда FORGET...

А FORGET то в SPF и нет. :D

Автор:  WingLion [ Вт сен 19, 2006 16:30 ]
Заголовок сообщения: 

Может, его и в ANS-94 нет, а то я и не в курсе.
Зря выкинули, если нет. :(

Автор:  ygrek [ Вт сен 19, 2006 22:34 ]
Заголовок сообщения: 

Код:
15.6.2.1580   FORGET    TOOLS EXT
....
Note: This word is obsolescent and is included as a concession to existing
implementations.


Взамен REQUIRE MARKER ~clf/marker.f

Автор:  chess [ Ср сен 20, 2006 13:57 ]
Заголовок сообщения: 

О текстах программ.
Человек часто идет от результата-цели, которого он хочет достигнуть к средствам и приемам, с помощью которых этот результат достигается.
Поэтому нужно допустить написание программ не только снизу-вверх, но и сверху вниз.

Автор:  chess [ Ср сен 20, 2006 15:59 ]
Заголовок сообщения: 

Из слов ['] и ' оставить только ', но сделать его зависимым от state. Аналогично для Compile и [Compile].

Автор:  Icefall [ Чт сен 21, 2006 09:10 ]
Заголовок сообщения: 

chess писал(а):
Из слов ['] и ' оставить только ', но сделать его зависимым от state. Аналогично для Compile и [Compile].

Было уже, в стандартах до 83. И читай Броуди, чем это плохо.

Автор:  chess [ Чт сен 21, 2006 09:41 ]
Заголовок сообщения: 

Icefall писал(а):
Было уже, в стандартах до 83.

Что касается COMPILE и [COMPILE] так в ans94 это уже сделано - только там оно POSTPONE(наверно Броуди не читали :o ).

Страница 7 из 11 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/