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 и другие саморасширяющиеся системы программирования - а нужно-то чтобы была и возможность корректного самосужения . |
Автор: | WingLion [ Вт сен 19, 2006 16:00 ] |
Заголовок сообщения: | |
самосужение - это команда FORGET... Формально, можно сузить и до нуля, но хороший Форт обычно имеет защиту ядра от FORGET |
Автор: | chess [ Вт сен 19, 2006 16:04 ] |
Заголовок сообщения: | |
WingLion писал(а): самосужение - это команда FORGET...
А FORGET то в SPF и нет. |
Автор: | 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(наверно Броуди не читали ). |
Страница 7 из 11 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |