Редактирование: IMMEDIATE

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

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

Текущая версия Ваш текст
Строка 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
             ( -- )
             ( -- )
Строка 19: Строка 16:
  Типичное использование:
  Типичное использование:
         : X  ...  ;  IMMEDIATE
         : X  ...  ;  IMMEDIATE
</pre>


== История ==
В некоторых Фортах IMMEDIATE не переключает, а строго устанавливает. Как его там сбросить? :−)


В некоторых Фортах вместо числа 128 используется константа &IFLAG или &IMMEDIATE
== IMMEDIATE в предыдущем стандарте Forth-83 (англ.) ==
 
Чак Мур, создатель Форта, при разработке своего первого форт-процессора 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
Строка 34: Строка 24:
           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>


== Ссылки ==
== Ссылки ==
* {{Исходник|IMMEDIATE|IMMEDIATE}}
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1710 Слово IMMEDIATE в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1710 комментарий к нему] ''(англ.)''
* См. слова [[STATE]], [[INTERPRET]], [[Слово [|&#91;]] и [[Слово ]|&#93;]]
* [http://www.forth200x.org/documents/html/core.html#core:IMMEDIATE Слово IMMEDIATE в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:IMMEDIATE комментарий к нему] ''(англ.)''
* Слово [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] ''(англ.)''




Строка 117: Строка 33:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Компилирующие слова]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)