IMMEDIATE: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показаны 33 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
'''IMMEDIATE''' — стандартное слово [[Каллисто]]. | '''IMMEDIATE''' (немедленный, непосредственный, немедленно) — стандартное слово [[Каллисто]]. | ||
IMMEDIATE ( −− ) Изменить признак IMMEDIATE последней созданной статьи. | |||
Преобразует слово, за описанием которого следует, в оператор, исполняемый при компиляции. | Преобразует слово, за описанием которого следует, в оператор, исполняемый [[Слово ]|при компиляции]]. | ||
== Ввод слова IMMEDIATE == | |||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша 7|{{Серая клавиша|7}}]] {{ШГ←}} [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] | |||
== IMMEDIATE в стандарте ANS Forth == | == IMMEDIATE в стандарте ANS Forth == | ||
<pre> | |||
6.1.1710 IMMEDIATE CORE | 6.1.1710 IMMEDIATE CORE | ||
( -- ) | ( -- ) | ||
Строка 16: | Строка 19: | ||
Типичное использование: | Типичное использование: | ||
: X ... ; IMMEDIATE | : X ... ; IMMEDIATE | ||
</pre> | |||
== История == | |||
В некоторых Фортах IMMEDIATE не переключает, а строго устанавливает. Как его там сбросить? :−) | |||
== IMMEDIATE в предыдущем стандарте Forth-83 (англ.) == | В некоторых Фортах вместо числа 128 используется константа &IFLAG или &IMMEDIATE | ||
Чак Мур, создатель Форта, при разработке своего первого форт-процессора Novix сделал для него версию Форта под названием cmForth. В ней не было слова IMMEDIATE, а был список MACRO. Список MACRO просматривался первым и добавленные в него слова исполнялись без компиляции. Похожая система перешла в {{colorForth}} и, возможно, будет реализована в [[Каллисто 2.0]]. | |||
=== IMMEDIATE в предыдущем стандарте Forth-83 (англ.) === | |||
IMMEDIATE -- 79 | IMMEDIATE -- 79 | ||
Marks the most recently created dictionary entry as a word | Marks the most recently created dictionary entry as a word | ||
Строка 24: | Строка 34: | ||
rather than compiled. | rather than compiled. | ||
=== IMMEDIATE в стандарте Forth-79 (англ.) === | |||
IMMEDIATE 103 | |||
Marks the most recently made dictionary entry as a word which | |||
will be executed when encountered during compilation rather | |||
than compiled. | |||
=== IMMEDIATE в fig-FORTH Release 1 glossary, май 1979 (англ.) === | |||
IMMEDIATE | |||
Mark the most recently made definition so that when encountered at | |||
compile time, it will be executed rather than being compiled. i.e. | |||
the precedence bit in its header is set. | |||
This method allows definitions to handle unusual compiling | |||
situations, rather. than build them into the fundamental compiler. | |||
The user may force compilation of an immediate definition by | |||
preceeding it with [COMPILE], | |||
== Реализация == | |||
Изменяет признак немедленного исполнения в байте-счётчике, первом байте заголовка [[LAST|последней созданной]] [[Словарная статья|словарной статьи]]. | |||
<pre> | |||
3396 ;#IMMEDIATE | |||
3397 ; IMMEDIATE ( −− ) Изменить признак IMMEDIATE последней созданной статьи. | |||
3398 LIMMED: .DB 9 | |||
3399 .TEXT "IMMEDIATE" | |||
3400 .DW LINTER | |||
3401 IMMED: .DW CALL, LATES, LITB ; Преобразовать слово, за описанием которого следует, в оператор, исполняемый при компиляции. | |||
3402 .DB 128 | |||
3403 .DW TOGL, EXIT | |||
</pre> | |||
=== Реализации в SP-Forth 4.20 === | |||
<pre> | |||
1 CONSTANT &IMMEDIATE \ константа для высечения флажка IMMEDIATE | |||
… | |||
: IS-IMMEDIATE ( NFA -> F ) | |||
NAME>F C@ &IMMEDIATE AND | |||
; | |||
… | |||
\ для обратной совместимости: | |||
: ?IMMEDIATE ( NFA -> F ) IS-IMMEDIATE ; | |||
… | |||
: IMMEDIATE ( -- ) \ 94 | |||
\ Сделать последнее определение словом немедленного исполнения. | |||
\ Исключительная ситуация возникает, если последнее определение | |||
\ не имеет имени. | |||
LAST @ NAME>F DUP C@ &IMMEDIATE OR SWAP C! | |||
; | |||
</pre> | |||
<pre> | |||
: IMMEDIATE [T] IMMEDIATE [I] ; | |||
</pre> | |||
=== Советская реализация === | |||
У Баранова-Ноздрунова определение слова IMMEDIATE выглядит так (стр. 64): | |||
: IMMEDIATE ( ---> ) LATEST C@ 128 OR LATEST C! ; | |||
Описание и определение слова IMMEDIATE в ядре ФОРТ-ЕС: | |||
<PRE> | |||
IMMEDIATE -> ДАТЬ ПРИЗНАК "IMMEDIATE" ПОСЛЕДНЕЙ 31 | |||
СОЗДАННОЙ СЛОВАРНОЙ СТАТЬЕ | |||
Экран номер 31 | |||
( 31.03.86 LATEST DEFINITIONS SMUDGE UNSMUDGE IMMEDIATE ID.) | |||
: IMMEDIATE ( ->) LATEST С@ [ &IFLAG ] LITERAL OR LATEST C! ; | |||
</PRE> | |||
Определение слова IMMEDIATE в FORTH ИТЭФ: | |||
<PRE> | |||
HEAD 211Q,'IMMEDIAT',305Q,IMMED,$COL ; IMMEDIATE | |||
DW LATES,$CL,TOGL,SEMI | |||
</PRE> | |||
== Ссылки == | == Ссылки == | ||
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1710 | * {{Исходник|IMMEDIATE|IMMEDIATE}} | ||
* [http:// | * См. слова [[STATE]], [[INTERPRET]], [[Слово [|[]] и [[Слово ]|]]] | ||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1710 IMMEDIATE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1710 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | |||
* Слово [http://forth-standard.org/standard/core/IMMEDIATE IMMEDIATE] и [http://forth-standard.org/standard/rationale#rat:core:IMMEDIATE комментарий к нему] в черновике Forth 200x ''(англ.)'' | |||
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\11.RASSIRENIE%20KOMPILATORA:%20OPREDELAUSIE%20I%20KOMPILIRUUSIE%20SLOWA РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | |||
* [http://www.forth.com/starting-forth/sf11/sf11.html Extending the Compiler] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |||
Строка 33: | Строка 117: | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Слова высокого уровня]] | |||
[[Категория:Компилирующие слова]] | |||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 08:11, 10 марта 2019
IMMEDIATE (немедленный, непосредственный, немедленно) — стандартное слово Каллисто.
IMMEDIATE ( −− ) Изменить признак IMMEDIATE последней созданной статьи.
Преобразует слово, за описанием которого следует, в оператор, исполняемый при компиляции.
Ввод слова IMMEDIATE[править]
В режиме ЛАТ последовательно нажмите клавиши 7 ÷ ÷ ИП K 7 ШГ← 2 ИП
IMMEDIATE в стандарте ANS Forth[править]
6.1.1710 IMMEDIATE CORE ( -- ) Делает самое последнее определение словом немедленного исполнения. Неопределенная ситуация существует, если самое последнее определение не имеет имени. См.: D.6.7 Immediate-ности. A.6.1.1710 IMMEDIATE Типичное использование: : X ... ; IMMEDIATE
История[править]
В некоторых Фортах IMMEDIATE не переключает, а строго устанавливает. Как его там сбросить? :−)
В некоторых Фортах вместо числа 128 используется константа &IFLAG или &IMMEDIATE
Чак Мур, создатель Форта, при разработке своего первого форт-процессора Novix сделал для него версию Форта под названием cmForth. В ней не было слова IMMEDIATE, а был список MACRO. Список MACRO просматривался первым и добавленные в него слова исполнялись без компиляции. Похожая система перешла в colorForth и, возможно, будет реализована в Каллисто 2.0.
IMMEDIATE в предыдущем стандарте Forth-83 (англ.)[править]
IMMEDIATE -- 79 Marks the most recently created dictionary entry as a word which will be executed when encountered during compilation rather than compiled.
IMMEDIATE в стандарте Forth-79 (англ.)[править]
IMMEDIATE 103 Marks the most recently made dictionary entry as a word which will be executed when encountered during compilation rather than compiled.
IMMEDIATE в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
IMMEDIATE Mark the most recently made definition so that when encountered at compile time, it will be executed rather than being compiled. i.e. the precedence bit in its header is set. This method allows definitions to handle unusual compiling situations, rather. than build them into the fundamental compiler. The user may force compilation of an immediate definition by preceeding it with [COMPILE],
Реализация[править]
Изменяет признак немедленного исполнения в байте-счётчике, первом байте заголовка последней созданной словарной статьи.
3396 ;#IMMEDIATE 3397 ; IMMEDIATE ( −− ) Изменить признак IMMEDIATE последней созданной статьи. 3398 LIMMED: .DB 9 3399 .TEXT "IMMEDIATE" 3400 .DW LINTER 3401 IMMED: .DW CALL, LATES, LITB ; Преобразовать слово, за описанием которого следует, в оператор, исполняемый при компиляции. 3402 .DB 128 3403 .DW TOGL, EXIT
Реализации в SP-Forth 4.20[править]
1 CONSTANT &IMMEDIATE \ константа для высечения флажка IMMEDIATE … : IS-IMMEDIATE ( NFA -> F ) NAME>F C@ &IMMEDIATE AND ; … \ для обратной совместимости: : ?IMMEDIATE ( NFA -> F ) IS-IMMEDIATE ; … : IMMEDIATE ( -- ) \ 94 \ Сделать последнее определение словом немедленного исполнения. \ Исключительная ситуация возникает, если последнее определение \ не имеет имени. LAST @ NAME>F DUP C@ &IMMEDIATE OR SWAP C! ;
: IMMEDIATE [T] IMMEDIATE [I] ;
Советская реализация[править]
У Баранова-Ноздрунова определение слова IMMEDIATE выглядит так (стр. 64):
: IMMEDIATE ( ---> ) LATEST C@ 128 OR LATEST C! ;
Описание и определение слова IMMEDIATE в ядре ФОРТ-ЕС:
IMMEDIATE -> ДАТЬ ПРИЗНАК "IMMEDIATE" ПОСЛЕДНЕЙ 31 СОЗДАННОЙ СЛОВАРНОЙ СТАТЬЕ Экран номер 31 ( 31.03.86 LATEST DEFINITIONS SMUDGE UNSMUDGE IMMEDIATE ID.) : IMMEDIATE ( ->) LATEST С@ [ &IFLAG ] LITERAL OR LATEST C! ;
Определение слова IMMEDIATE в FORTH ИТЭФ:
HEAD 211Q,'IMMEDIAT',305Q,IMMED,$COL ; IMMEDIATE DW LATES,$CL,TOGL,SEMI
Ссылки[править]
- Исходный текст слова IMMEDIATE в Каллисто Классик 1.0
- См. слова STATE, INTERPRET, [ и ]
- Слово IMMEDIATE и комментарий к нему в стандарте ANS Forth (англ.)
- Слово IMMEDIATE и комментарий к нему в черновике Forth 200x (англ.)
- РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Extending the Compiler в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |