Forth
http://www.fforum.winglion.ru/

CREATE-WORD
http://www.fforum.winglion.ru/viewtopic.php?f=23&t=2770
Страница 1 из 1

Автор:  Hishnik [ Пт окт 21, 2011 02:27 ]
Заголовок сообщения:  CREATE-WORD

В качестве эксперимента, а также из-за того, что это удобнее делать в ядре, добавлено слово CREATE-WORD. Это альтернатива CREATE, только имя не выбирается из входного потока, а снимается со стека в виде указателя на ASCIIZ. Вот фрагментик:

Код:
CREATE WORDBUF 256 ALLOT

: instance
  INSTANCES TO ACTIVE-INSTANCE
  PARSE DUP WORDBUF SMOVE

  \ всякое оформление опущено, чтобы не засорять текст

  WORDBUF CREATE-WORD INSTANCES 1 - , DOES> @ TO ACTIVE-INSTANCE
;



Это библиотека высокоуровневого структурного описания схем. При вводе instance my_module1 словом PARSE съестся my_module1, и попадет в массив с именами модулей (попутно оставшись в массиве WORDBUF). Чуть позже из содержимого WORDBUF будет создано слово, которое при исполнении положит на стек индекс созданного модуля.
Похожего навскидку не нашлось.

P.S. Будет в Quark build 30, который сейчас в состоянии "еще небольшой список доделать".

Автор:  chess [ Пт окт 21, 2011 11:13 ]
Заголовок сообщения:  Re: CREATE-WORD

Хищник писал(а):
В качестве эксперимента, а также из-за того, что это удобнее делать в ядре, добавлено слово CREATE-WORD.

В spf для этих целей можно использовать слово CREATED ( addr len -- ).

Автор:  Hishnik [ Пт окт 21, 2011 11:44 ]
Заголовок сообщения:  Re: CREATE-WORD

chess писал(а):
В spf для этих целей можно использовать слово CREATED ( addr len -- ).

Кстати, никогда мне такой синтаксис не нравился. Особенно это проявляется на INCLUDED. То есть я сообщаю, что файл уже загружен???? Вообще-то это команда на загрузку файла.

Автор:  chess [ Пт окт 21, 2011 13:32 ]
Заголовок сообщения:  Re: CREATE-WORD

Хищник писал(а):
Кстати, никогда мне такой синтаксис не нравился. Особенно это проявляется на INCLUDED. То есть я сообщаю, что файл уже загружен???? Вообще-то это команда на загрузку файла.

По моему на букву D в конце подобных слов навесили намек на то, что эти слова параметризуются данными со стека, а на то, что
появляется несоответствие в действиях слов и их именах, махнули рукой.

Автор:  Hishnik [ Пт окт 21, 2011 14:01 ]
Заголовок сообщения:  Re: CREATE-WORD

chess писал(а):
По моему на букву D в конце подобных слов навесили намек на то, что эти слова параметризуются данными со стека, а на то, что
появляется несоответствие в действиях слов и их именах, махнули рукой.

Хороший синтаксис - не такая уж простая проблема.

Автор:  chess [ Пт окт 21, 2011 16:08 ]
Заголовок сообщения:  Re: CREATE-WORD

Хищник писал(а):
Хороший синтаксис - не такая уж простая проблема.

В классическом форте, кроме как в представлении чисел, как такового синтаксиса-то и нет(пробелы да имена слов).
Имена словам - да, надо подбирать подходящие, но это практически невыполнимая задача, так как эти имена могут иметь широкий(многослойный) смысл. Особо тщательно их надо подбирать для слов ядра.
Синтаксис, он, в чем-то таком:
Код:
: sum-hlb ( N -- Nlb+Nhb ) \ сумма номеров старшего и младшего единичных битов ячейки
hb( A=H\A ) lb( A=L\A )
1|[hb]1[lb]+ ;

200000000 sum-hlb . ( 36 )

Автор:  Hishnik [ Пт окт 21, 2011 23:48 ]
Заголовок сообщения:  Re: CREATE-WORD

chess писал(а):
Синтаксис, он, в чем-то таком:

Код:
: sum-hlb ( N -- Nlb+Nhb ) \ сумма номеров старшего и младшего единичных битов ячейки
hb( A=H\A ) lb( A=L\A )
1|[hb]1[lb]+ ;

200000000 sum-hlb . ( 36 )


А мне кажется, в таком...

Код:
instance proc_core kf532

50000000 FCORE setparameter
16384 CODEMEMORYSIZE setparameter
1024 DATAMEMORYSIZE setparameter

proc-core signal rx external location L16

// ============ DCM ====================

instance generator dcm_sp6

signal clk_in external location L15

// ============= LEDS =====================

8 bit register leds
leds 1000 baseaddr
leds locations A1 A2 A3 A4 A5 B1 B3 D4

Автор:  diver [ Сб окт 22, 2011 15:08 ]
Заголовок сообщения:  Re: CREATE-WORD

Хищник писал(а):
А мне кажется, в таком...

Код:
instance proc_core kf532

50000000 FCORE setparameter
16384 CODEMEMORYSIZE setparameter
1024 DATAMEMORYSIZE setparameter

proc-core signal rx external location L16

// ============ DCM ====================

instance generator dcm_sp6

signal clk_in external location L15

// ============= LEDS =====================

8 bit register leds
leds 1000 baseaddr
leds locations A1 A2 A3 A4 A5 B1 B3 D4


:!: :!: :!: красиво.....

Автор:  white_TigR [ Ср окт 26, 2011 15:21 ]
Заголовок сообщения:  Re: CREATE-WORD

Хищник писал(а):
В качестве эксперимента, а также из-за того, что это удобнее делать в ядре, добавлено слово CREATE-WORD. Это альтернатива CREATE, только имя не выбирается из входного потока, а снимается со стека в виде указателя на ASCIIZ

Я в каком то форте видел (CREATE) для такого.

Автор:  chess [ Ср окт 26, 2011 15:54 ]
Заголовок сообщения:  Re: CREATE-WORD

white_TigR писал(а):
Я в каком то форте видел (CREATE) для такого.

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

Автор:  Hishnik [ Ср окт 26, 2011 16:57 ]
Заголовок сообщения:  Re: CREATE-WORD

white_TigR писал(а):
Я в каком то форте видел (CREATE) для такого.

Кстати, это имеет смысл. Если рассматривать CREATE как слово, которое сначала получает строку с именем слова, а потом создает его, то можно написать что-то вроде
Код:
: CREATE PARSE (CREATE) ;

В скобках часто описывают "внутреннюю" реализацию слов управления.

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