Forth
http://fforum.winglion.ru/

Полезные слова и идеи для Форта.
http://fforum.winglion.ru/viewtopic.php?f=2&t=678
Страница 1 из 6

Автор:  Kopa [ Пн апр 23, 2007 07:02 ]
Заголовок сообщения:  Полезные слова и идеи для Форта.

Не найдя подходящего топика создал новый для обсуждения.

Предлагаю включить в расширение Форта слова неразрушающего контроля
стека ?IF ?WHILE ?UNTIL ( если еще это не сделали )

P.S. Возможно данное обсуждение лучше перенести в раздел конференций.

Автор:  Mihail [ Пн апр 23, 2007 11:59 ]
Заголовок сообщения: 

: ?IF POSTPONE DUP POSTPONE IF ; IMMEDIATE

Автор:  chess [ Пн апр 23, 2007 12:11 ]
Заголовок сообщения: 

Mihail писал(а):
: ?IF POSTPONE DUP POSTPONE IF ; IMMEDIATE

Ну тогда уж и:
: ?WHILE POSTPONE DUP POSTPONE WHILE ; IMMEDIATE
: ?UNTIL POSTPONE DUP POSTPONE UNTIL ; IMMEDIATE :)

Автор:  Kopa [ Вт апр 24, 2007 07:12 ]
Заголовок сообщения: 

Предлагаю средство локальной борьбы с уменьшением
засилья в Форт текстах слов SWAP OVER ROT возможно DUP и т.д. используя генератор
стековых перестановок.

Можно ввести слово \\ после которого указывать именование стековых переменных
При первом его употреблении вводятся именованные стековые переменные
При последующем употреблении \\ служит для изменения порядка стековых переменных.
дальше в строке можно использовать только комментарий.

Пример:
Код:
              ...
              \\ a b с   \ первое декларирование именованных стековых переменных
              \\ а с b   \ при генерации будет вставлен SWAP в данном месте
              \\ c b a   \ при генерации будет вставлена команда ROT в программу
              \\ с b a b  \ будет сгенерирован OVER
             ...


P.S. Использование именованной 2-й стековой переменной по имени вместо OVER
даже не будет противоречить способу оперирования стеком.
Но все же нужно понимать разницу между стеком и массивом и осторожно применять
данный подход:)

Автор:  diver [ Вт апр 24, 2007 09:57 ]
Заголовок сообщения: 

Mihail писал(а):
: ?IF POSTPONE DUP POSTPONE IF ; IMMEDIATE

chess писал(а):
Ну тогда уж и:
: ?WHILE POSTPONE DUP POSTPONE WHILE ; IMMEDIATE
: ?UNTIL POSTPONE DUP POSTPONE UNTIL ; IMMEDIATE

а смысл?, тогда уж реализовывать подобные слова на низком уровне

Автор:  Mihail [ Вт апр 24, 2007 10:10 ]
Заголовок сообщения: 

diver писал(а):
а смысл?, тогда уж реализовывать подобные слова на низком уровне

Если не использовать оптимизатор
Код:
>: ?IF POSTPONE DUP POSTPONE IF ; IMMEDIATE
Ok
>: ZZZ ?IF THEN ;
Ok
>SEE ZZZ

58B070 0BC0      OR      EAX , EAX
58B072 7400      JE      58B074
58B074 C3      RET     NEAR
END-CODE   Ok

Автор:  chess [ Вт апр 24, 2007 10:47 ]
Заголовок сообщения: 

diver писал(а):
а смысл?, тогда уж реализовывать подобные слова на низком уровне

При использовании оптимизатора никакого смысла реализовывать на низком уровне нет.

Код:
: ?UNTIL POSTPONE DUP POSTPONE UNTIL ; IMMEDIATE
: XXX BEGIN ?UNTIL ;
SEE XXX
CODE XXX
569430 0BC0             OR      EAX , EAX
569432 74FC             JE      569430
569434 C3               RET     NEAR
END-CODE

Автор:  mOleg [ Ср апр 25, 2007 03:01 ]
Заголовок сообщения: 

Kopa писал(а):
Предлагаю включить в расширение Форта слова неразрушающего контроля
стека ?IF ?WHILE ?UNTIL ( если еще это не сделали )

только незачем придумывать новое, когда уже есть -IF -WHILE - у Мура

Автор:  in4 [ Ср апр 25, 2007 04:00 ]
Заголовок сообщения: 

mOleg писал(а):
только незачем придумывать новое, когда уже есть -IF -WHILE - у Мура

У Мура не совсем то...
У него все проверки были неразрушающими.
-if проверял флаг знака верхнего элемента стека
-while мне не попадался
-IF я видел как короткий синоним IFNOT

Автор:  yz [ Пт май 04, 2007 22:00 ]
Заголовок сообщения: 

[quote="Kopa"]
Код:
              ...
              \\ a b с   \ первое декларирование именованных стековых переменных
              \\ а с b   \ при генерации будет вставлен SWAP в данном месте
              \\ c b a   \ при генерации будет вставлена команда ROT в программу
              \\ с b a b  \ будет сгенерирован OVER
             ...

А кто же это генерировать будет? Задача нетривиальная, нужен компилятор и оптимизатор.

По-моему, проще подключить локальные переменные и писать
с b a b напрямую.

Автор:  yz [ Пт май 04, 2007 22:02 ]
Заголовок сообщения:  Re: Полезные слова и идеи для Форта.

Kopa писал(а):
Предлагаю включить в расширение Форта слова неразрушающего контроля
стека ?IF ?WHILE ?UNTIL ( если еще это не сделали )

Этого не сделали, потому что ИЛИ все слова должны брать аргументы со стека, ИЛИ никто. В противном случае получится бедлам.

Автор:  chess [ Сб май 05, 2007 09:43 ]
Заголовок сообщения: 

yz писал(а):
Этого не сделали, потому что ИЛИ все слова должны брать аргументы со стека, ИЛИ никто. В противном случае получится бедлам.

Вывод ни из чего. Слова в форте друг с другом не связаны, одно может брать параметры со стека, другое может не брать. Можно представить даже слова, которые в определенной ситуации могут брать, а в другой определенной ситуации не брать.

Автор:  WingLion [ Сб май 05, 2007 10:52 ]
Заголовок сообщения: 

Kopa писал(а):
локальной борьбы с уменьшением
засилья в Форт текстах слов SWAP OVER ROT возможно DUP и т.д. используя генератор


Сначала надо бы слово ВЕТРЯНАЯ-МЕЛЬНИЦА побороть :))

Автор:  yz [ Сб май 05, 2007 14:49 ]
Заголовок сообщения: 

chess писал(а):
Слова в форте друг с другом не связаны

В Форте не связаны, а в голове человека связаны. Попробуйте определить пару десятков таких слов, особенно, если в одних случаях они берут аргументы, а в других нет. Ну и потом попытайтесь все это запомнить и написать.

Автор:  in4 [ Сб май 05, 2007 15:37 ]
Заголовок сообщения: 

chess писал(а):
Можно представить даже слова, которые в определенной ситуации могут брать, а в другой определенной ситуации не брать.

Классики говорят, и я с ними согласен, что таких слов надо поменьше, а лучше, чтоб вообще не было! ;)

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