IMMEDIATE: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 19 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''IMMEDIATE''' (немедленный, непосредственный, немедленно) — стандартное слово [[Каллисто]].
'''IMMEDIATE''' (немедленный, непосредственный, немедленно) — стандартное слово [[Каллисто]].
 
IMMEDIATE      ( −− )                              Изменить признак IMMEDIATE последней созданной статьи.
Преобразует слово, за описанием которого следует, в оператор, исполняемый при компиляции.
Преобразует слово, за описанием которого следует, в оператор, исполняемый [[Слово ]|при компиляции]].
 
Устанавливает в единицу признак немедленного исполнения в байте-счётчике последней созданной словарной статьи.


== Ввод слова IMMEDIATE ==
== Ввод слова IMMEDIATE ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 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
             ( -- )
             ( -- )
Строка 20: Строка 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
Строка 27: Строка 34:
           rather than compiled.
           rather than compiled.


== IMMEDIATE в стандарте Forth-79 (англ.) ==
=== IMMEDIATE в стандарте Forth-79 (англ.) ===
  IMMEDIATE                                    103
  IMMEDIATE                                    103
     Marks the most recently made dictionary entry as a word  which
     Marks the most recently made dictionary entry as a word  which
Строка 33: Строка 40:
     than compiled.
     than compiled.


== IMMEDIATE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
=== IMMEDIATE в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
  IMMEDIATE
  IMMEDIATE
         Mark the most recently made definition so that when encountered at
         Mark the most recently made definition so that when encountered at
Строка 43: Строка 50:
         preceeding it with [COMPILE],
         preceeding it with [COMPILE],


== История ==
== Реализация ==
Чак Мур, создатель Форта, при разработке своего первого форт-процессора Novix сделал для него версию Форта под названием cmForth
Изменяет признак немедленного исполнения в байте-счётчике, первом байте заголовка [[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>


В ней не было слова IMMEDIATE, а был список MACRO
=== Реализации в 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>


Список MACRO просматривался первым и добавленные в него слова исполнялись без компиляции. Похожая система перешла в {{colorForth}}.
=== Советская реализация ===
 
== Реализация IMMEDIATE ==
У Баранова-Ноздрунова определение слова IMMEDIATE выглядит так (стр. 64):
У Баранова-Ноздрунова определение слова IMMEDIATE выглядит так (стр. 64):
  : IMMEDIATE  ( ---> )  LATEST C@ 128 OR LATEST C!  ;
  : IMMEDIATE  ( ---> )  LATEST C@ 128 OR LATEST C!  ;


Определение слова IMMEDIATE в ядре ФОРТ-ЕС:
Описание и определение слова IMMEDIATE в ядре ФОРТ-ЕС:
<PRE>
<PRE>
IMMEDIATE -> ДАТЬ ПРИЗНАК "IMMEDIATE" ПОСЛЕДНЕЙ                31
          СОЗДАННОЙ СЛОВАРНОЙ СТАТЬЕ
                     Экран номер 31
                     Экран номер 31
( 31.03.86    LATEST DEFINITIONS SMUDGE UNSMUDGE IMMEDIATE ID.)
( 31.03.86    LATEST DEFINITIONS SMUDGE UNSMUDGE IMMEDIATE ID.)


: IMMEDIATE ( ->)  LATEST С@ [ &IFLAG ] LITERAL OR LATEST C! ;
: IMMEDIATE ( ->)  LATEST С@ [ &IFLAG ] LITERAL OR LATEST C! ;
</PRE>
Определение слова IMMEDIATE в FORTH ИТЭФ:
<PRE>
            HEAD    211Q,'IMMEDIAT',305Q,IMMED,$COL      ; IMMEDIATE
            DW  LATES,$CL,TOGL,SEMI
</PRE>
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|IMMEDIATE|IMMEDIATE}}
* См. слова [[STATE]], [[INTERPRET]], [[Слово [|&#91;]] и [[Слово ]|&#93;]]
* Слово [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.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://www.forth200x.org/documents/html3/core/IMMEDIATE.html IMMEDIATE] и [http://www.forth200x.org/documents/html3/rationale.html#rat:core:IMMEDIATE комментарий к нему] в черновике Forth 200x ''(англ.)''
* Слово [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://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] ''(англ.)''
* [http://www.forth.com/starting-forth/sf11/sf11.html Extending the Compiler] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
Строка 73: Строка 118:
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Слова высокого уровня]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Компилирующие слова]]
[[Категория:Стандартные слова]]
[[Категория: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

Ссылки[править]


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


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