Редактирование: STATE
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
'''STATE''' (состояние) — | '''STATE''' (состояние) — стандартное слово [[Каллисто]]. Переменная, хранящая состояние [[INTERPRET|текстового интерпретатора]]. «Истина» (ненулевое значение) означает режим компиляции, «ложь» (ноль) — интерпретации. | ||
( -- u-адр ) | |||
Слово STATE кладёт на стек u-адр — адрес [[Ячейка (Каллисто)|ячейки]], содержащей текущий режим работы [[INTERPRET|текстового интерпретатора]]. Значение ноль («ложь») означает режим интерпретации — [[INTERPRET|текстовый интерпретатор]] [[EXECUTE|исполняет]] слова сразу же после их нахождения в [[Словарь|словаре]]. | |||
Обращаться к STATE самостоятельно не рекомендуется. Для переключения в | В [[Каллисто]] значение 128 (не ноль) означает режим компиляции. В режиме компиляции [[INTERPRET|текстовый интерпретатор]] [[, (Каллисто)|компилирует]] (записывает в [[словарь]]) [[xt]] найденных слов. Адресный интерпретатор исполнит эти слова позже, когда потребуется. | ||
Обращаться к STATE самостоятельно не рекомендуется. Для переключения в режим интерпретации существует слово [[[ (Каллисто)|[]], а в режим компиляции [[INTERPRET|текстовый интерпретатор]] переключает слово [[] (Каллисто)|]]]. Это два удобных, стандартных слова. Они устоялись, широко известны и переносимы на всевозможные варианты Форта. | |||
== STATE в стандарте ANS Forth == | == STATE в стандарте ANS Forth == | ||
6.1.2250 STATE CORE | 6.1.2250 STATE CORE | ||
( -- a-addr ) | ( -- a-addr ) | ||
Строка 69: | Строка 67: | ||
ABORT, 6.1.2050 QUIT, 6.1.2250 STATE, 6.1.2500 [, 6.1.2540 ], | ABORT, 6.1.2050 QUIT, 6.1.2250 STATE, 6.1.2500 [, 6.1.2540 ], | ||
6.2.0455 :NONAME, 15.6.2.0470 ;CODE. | 6.2.0455 :NONAME, 15.6.2.0470 ;CODE. | ||
== STATE в предыдущем стандарте Forth-83 (англ.) == | |||
STATE -- addr U,79 | STATE -- addr U,79 | ||
The address of a variable containing the compilation state. | The address of a variable containing the compilation state. | ||
Строка 89: | Строка 76: | ||
may not modify this variable. | may not modify this variable. | ||
== STATE в стандарте Forth-79 (англ.) == | |||
STATE -- addr U,164 | STATE -- addr U,164 | ||
Leave the address of the variable containing the compilation | Leave the address of the variable containing the compilation | ||
Строка 95: | Строка 83: | ||
but the value itself may be installation dependent. | but the value itself may be installation dependent. | ||
== STATE в fig-FORTH Release 1 glossary, май 1979 (англ.) == | |||
STATE --- addr L0,U | STATE --- addr L0,U | ||
A user variable containing the compilation state. A non-zero value | A user variable containing the compilation state. A non-zero value | ||
Строка 101: | Строка 90: | ||
dependent. | dependent. | ||
== | == История == | ||
Устоявшееся слово STATE взято из Форта, где присутствует в ядре всех стандартов (''англ.'' CORE) со времён fig-Форта до готовящегося стандарта Форт-2012. Хотя для хранения состояния [[INTERPRET|текстового интерпретатора]] достаточно одного байта, [[Каллисто]] идёт навстречу стандарту и отводит на эту переменную целую [[Ячейка (Каллисто)|ячейку]]. | |||
Все реализации Форта сходятся на том, что нулевое значение STATE означает интерпретацию — [[EXECUTE|исполнение]] слов, найденных в [[Словарь|словаре]]. Какое именно ненулевое значение STATE означает компиляцию, стандарт не задаёт и оно разнится от одной реализации Форта к другой. | |||
Слова, проверяющие значения STATE, называются ''словами, зависящими от состояния''. Их использование часто приводит к непредсказуемым и труднообнаружимым ошибкам, что послужило темой серьёзной дискуссии в сообществе и сильно повлияло на стандарт Форта. Хорошая практика программирования включает советы, как избегать написания слов, зависящих от состояния. | |||
== Ссылки == | == Ссылки == | ||
* См. слова [[[ (Каллисто)|[]] [[] (Каллисто)|]]] | |||
* См. слова [[ | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2250 Слово STATE в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2250 комментарии к нему] ''(англ.)'' | ||
* | * [http://forth.sourceforge.net/standard/dpans/dpans15.htm#15.6.2.2250 Слово STATE в стандарте ANS Forth] ''(англ.)'' из расширения TOOLS EXT | ||
* [http://www.forth200x.org/documents/html/core.html#core:STATE Слово STATE в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:STATE комментарий к нему] ''(англ.)'' | |||
* [http://www.forth200x.org/documents/html/tools.html#tools:STATE Слово STATE в черновике Forth 200x] ''(англ.)'' из расширения TOOLS EXT | |||
* | |||
* | |||
* | |||
Строка 156: | Строка 109: | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория: | [[Категория:Стандартные переменные Каллисто]] | ||
[[Категория:Описание бета-версии Каллисто]] | |||
[[Категория: | |||