Наиболее распространено использование слова LITERAL, которое обычно определено так:
: LITERAL ( n --> ) STATE @ IF LIT, THEN ; IMMEDIATE
то есть в режиме трансляции слово ничего не делает, а в режиме компиляции добавляет литеральное значение числа n , лежащего на стеке. Слово на мой взгляд зря сделано IMMEDIATE словом.
Слишком часто встречается код: [COMPILE] LITERAL , либо заменяющий его код с проверкой STATE
Гораздо логичнее было бы писать так: [ bla bla bla LIT, ] а не классическое [ bla bla bla ] LITERAL
А сам LITERAL использовать везде без [COMPILE] как это делается сейчас. Тем не менее слово LITERAL достаточно полезное.
По аналогии с ним часто (по крайней мере мне) требуется слово, обладающее аналогичными свойствами, но для случая работы с исполнимыми адресами:
: REGULAR ( xt --> ) STATE @ IF COMPILE, ELSE EXECUTE THEN ;
причем, оно должно быть обязательно неIMMEDIATE словом!
пример использования:
: TO ( n / name --> ) ' 0x09 + REGULAR ; IMMEDIATE
: FROM ( / name --> xt ) ' 0x0E + REGULAR ; IMMEDIATE
Кстати, сам STATE тоже неудачно выбран. Слово должно быть по-хорошему VALUE (точнее USER-VALUE) переменной, так как чаще всего используется в виде STATE @ , а устанавливают значение STATE всего два слова: '[' и ']'
_________________ Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur
|