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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
(Новая страница: «'''QUIT''' — стандартное слово Каллисто. {{нет иллюстраций}} {{заготовка}} Категория:Слова…»)
 
 
(не показаны 43 промежуточные версии этого же участника)
Строка 1: Строка 1:
'''QUIT''' — стандартное слово [[Каллисто]].
'''QUIT''' (уйти, покидать) — стандартное слово [[Каллисто]].
QUIT          ( −− )                              Передать управление на пульт. Ждёт команд молча, без приглашения.
 
Очищает [[Стек возвратов Каллисто|стек возвратов]], устанавливает [[Слово [|состояние исполнения]] и возвращает управление на пульт [[Каллисто]] ([[BLK]]=0). Не выдаётся никаких сообщений.
 
«В сущности, пока Форт работает, он исполняет команду QUIT. QUIT — это резидентный монитор системы Форт.» © Юрий Семёнов (стр. 56)
 
== Ввод слова QUIT ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре белые клавиши [[Клавиша +|{{Серая клавиша|+}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 2|{{Серая клавиша|2}}]]
 
== QUIT в стандарте ANS Forth ==
<pre>
6.1.2050  QUIT                                                            CORE
            ( -- )  ( R:  i*x -- )
            Освобождает стек возвратов, сохраняет нуль в SOURCE-ID, если он
            присутствует, делает пользовательское устройство ввода входным
            источником, и вводит состояние интерпретации. Не отображает
            сообщение. Повторяет следующее:
 
            - Принимает строку из входного источника во входной буфер, обнуляет
              >IN, и интерпретирует.
            - Отображает определенную реализацией системную подсказку, если в
              состоянии интерпретации вся обработка была закончена, и нет
              неопределенной ситуации.
 
        См.: 3.4 Интерпретатор текста Forth.
</pre>
 
== История ==
Одна из отличительных черт Форта появилась в 1966 году, когда Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI). Это правило, что Форт подтверждает каждую строку ввода добавлением OK по завершению интерпретации. На RSI OK был на другой строчке, например:
    56 INSERT ALGOL IS VERY ADAPTABLE
    OK
 
В опубликованной реализации Баранова-Ноздрунова слово QUIT называется ФОРТ-СИСТЕМА
 
В редакторе EDT для Форта тоже есть слово QUIT — хотя его имя идентично слову QUIT из базового словаря Форта, их функции абсолютно различны.
 
=== QUIT в предыдущем стандарте Forth-83 (англ.) ===
      QUIT        --                            79
          Clears the return stack, sets interpret state, accepts new
          input from the current input device, and begins text
          interpretation.  No message is displayed.
 
=== QUIT в стандарте Forth-79 (англ.) ===
QUIT                                        211
    Clear  the return stack,  setting execution mode,  and  return
    control to the terminal.  No message is given.
 
=== QUIT в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
QUIT
        Clear the return stack, stop compilation, and return control to the
        operators terminal. No message is given.
 
== Реализация ==
<pre>
3427 ;#QUIT
3428 ; QUIT            ( −− )                              Передать управление на пульт. Ждать команд молча, без приглашения.
3429 ; Очистить стек возвратов, устанавить состояние исполнения и возвратить управление на пульт Каллисто.
3430 ; Не выдаётся никаких сообщений. Резидентный монитор среды Каллисто.
3431 LQUIT:          .DB    4
3432                .TEXT  "QUIT"
3433                .DW    LPAREN
3434 QUIT:          .DW    CALL
3435 RQUIT:          .DW BLK,ZSTORE, LBRAC
3436 QUI:            .DW RPSTO, CR, QUERY, INTER, STATE,UAT
3437                .DW ZEQU, ZBRAN,QUI, PDOTQ
3438                .DB 3
3439                .TEXT " ok"                    ; Это приглашение не будет видно при 2 FONT!
3440                .DW BRAN,QUI
</pre>
Реализация из SP-Forth 4.20:
<pre>
: MAIN1 ( -- )
  BEGIN
    REFILL
  WHILE
    INTERPRET OK
  REPEAT BYE
;
 
: QUIT ( -- ) ( R: i*x ) \ CORE 94
\ Сбросить стек возвратов, записать ноль в SOURCE-ID.
\ Установить стандартный входной поток и состояние интерпретации.
\ Не выводить сообщений. Повторять следующее:
\ - Принять строку из входного потока во входной буфер, обнулить >IN
\  и интепретировать.
\ - Вывести зависящее от реализации системное приглашение, если
\  система находится в состоянии интерпретации, все процессы завершены,
\  и нет неоднозначных ситуаций.
  BEGIN
    CONSOLE-HANDLES
    0 TO SOURCE-ID
    0 TO SOURCE-ID-XT
    [COMPILE] [
    ['] MAIN1 CATCH
    ['] ERROR CATCH DROP
(  R0 @ RP! \ стек не сбрасываем, т.к. это за нас делает CATCH :)
    S0 @ SP! \ стек    сбрасываем, т.к. OPTIONS может оставить значения :(
  AGAIN
;
</pre>
 
=== Советская реализация ===
Юрий Семёнов приводит следующее определение слова QUIT через [[QUERY]] и [[INTERPRET]] (стр. 56):
  : QUIT  0 BLK !                  ( переход в пультовый режим)
          [                      ( установка режима исполнения)
          BEGIN        ( начало  бесконечного  цикла ожидания)
          !RP        ( установка указателя возвратного стека в
                        начальное состояние)
          ↵ QUERY    ( приглашение ввести команду с терминала)
          INTERPRET      ( интерпретация и исполнение команды)
          STATE @ 0= IF ." OK"      ( сообщение о благополучном
                              выполнении в режиме "исполнения")
                      THEN 0  ( засылка 0 для поддержания цикла)
          UNTIL ;
 
Оно же, с использованием слова [[0!]] и цикла [[BEGIN]]…[[AGAIN]]:
  : QUIT  BLK 0!                  ( переход в пультовый режим)
          [                      ( установка режима исполнения)
          BEGIN        ( начало  бесконечного  цикла ожидания)
            !RP      ( установка указателя возвратного стека в
                        начальное состояние)
            ↵ QUERY  ( приглашение ввести команду с терминала)
            INTERPRET    ( интерпретация и исполнение команды)
            STATE @ 0= IF ." OK"    ( сообщение о благополучном
                              выполнении в режиме "исполнения")
                        THEN
          AGAIN ;
 
У Баранова-Ноздрунова определение слова QUIT выглядит так (стр. 81):
: QUIT  ( ---> )
  BEGIN  ↵  ." >"  ( Приглашение к вводу)
      TIB  80 EXPECT ( Ввести текст с терминала)
      SPAN  @  #TIB  ! ( Установить его длину)
  0 TIB  #TIB @ +  C! ( Установить ограничитель)
  0  >IN !  0  BLK ! ( Установить входной поток)
    INTERPRET ( Интерпретировать введённый текст)
    STATE @  0=  IF ." OK" THEN ( Подтверждение)
  AGAIN  ;
 
В ядре ФОРТ-ЕС слово QUIT называлось ФОРТ-СИСТЕМА
 
Вот его описание и определение:
<PRE>
ФОРТ-СИСТЕМА * -> ТЕКСТОВЫЙ ИНТЕРПРЕТАТОР ФОРТ-СИСТЕМЫ          40
 
                    Экран номер 40
( 31.03.84      EXPECT  OUERY INTERPRET  ФОРТ-СИСТЕМА  X )
 
: ФОРТ-СИСТЕМА  ( ->) BEGIN QUERY INTERPRET  AGAIN ;
 
</PRE>
Определение слова QUIT в FORTH ИТЭФ:
<PRE>
            HEAD    204Q,'QUI',324Q,QUIT,$COL            ; QUIT
            DW  ZERO,BLK,STORE,LBRAC
  QUI:      DW  RPSTO,CR,QUERY,INTER,STATE,AT
            DW  ZEQU,ZBRAN,QUI-$,PDOTQ
            DB  3,'  OK'
            DW  BRAN,QUI-$
</PRE>
 
== Ссылки ==
* {{Исходник|QUIT|QUIT}}
* См. слова [[ABORT]], [[WARM]], [[COLD]] и [[BYE]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2050 QUIT] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/QUIT QUIT] в черновике Forth 200x ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\09.FUNKZIONIROWANIE%20FORT-SISTEMY ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf6/sf6.html Throw It For a Loop] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://www.forth.com/starting-forth/sf9/sf9.html Under the Hood] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
 


{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]

Текущая версия от 20:49, 10 ноября 2017

QUIT (уйти, покидать) — стандартное слово Каллисто.

QUIT           ( −− )                               Передать управление на пульт. Ждёт команд молча, без приглашения.

Очищает стек возвратов, устанавливает состояние исполнения и возвращает управление на пульт Каллисто (BLK=0). Не выдаётся никаких сообщений.

«В сущности, пока Форт работает, он исполняет команду QUIT. QUIT — это резидентный монитор системы Форт.» © Юрий Семёнов (стр. 56)

Ввод слова QUIT[править]

В режиме ЛАТ последовательно нажмите четыре белые клавиши  +   3   7   2 

QUIT в стандарте ANS Forth[править]

 6.1.2050   QUIT                                                            CORE
            ( -- )  ( R:  i*x -- )
            Освобождает стек возвратов, сохраняет нуль в SOURCE-ID, если он 
            присутствует, делает пользовательское устройство ввода входным 
            источником, и вводит состояние интерпретации. Не отображает 
            сообщение. Повторяет следующее:

            - Принимает строку из входного источника во входной буфер, обнуляет
              >IN, и интерпретирует.
            - Отображает определенную реализацией системную подсказку, если в
              состоянии интерпретации вся обработка была закончена, и нет
              неопределенной ситуации.

        См.: 3.4 Интерпретатор текста Forth.

История[править]

Одна из отличительных черт Форта появилась в 1966 году, когда Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI). Это правило, что Форт подтверждает каждую строку ввода добавлением OK по завершению интерпретации. На RSI OK был на другой строчке, например:

    56 INSERT ALGOL IS VERY ADAPTABLE
    OK

В опубликованной реализации Баранова-Ноздрунова слово QUIT называется ФОРТ-СИСТЕМА

В редакторе EDT для Форта тоже есть слово QUIT — хотя его имя идентично слову QUIT из базового словаря Форта, их функции абсолютно различны.

QUIT в предыдущем стандарте Forth-83 (англ.)[править]

     QUIT         --                            79
          Clears the return stack, sets interpret state, accepts new
          input from the current input device, and begins text
          interpretation.  No message is displayed.

QUIT в стандарте Forth-79 (англ.)[править]

QUIT                                         211
    Clear  the return stack,  setting execution mode,  and  return
    control to the terminal.  No message is given.

QUIT в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

QUIT
       Clear the return stack, stop compilation, and return control to the
       operators terminal. No message is given.

Реализация[править]

3427 ;#QUIT
3428 ; QUIT             ( −− )                               Передать управление на пульт. Ждать команд молча, без приглашения.
3429 ; Очистить стек возвратов, устанавить состояние исполнения и возвратить управление на пульт Каллисто.
3430 ; Не выдаётся никаких сообщений. Резидентный монитор среды Каллисто.
3431 LQUIT:          .DB     4
3432                 .TEXT   "QUIT"
3433                 .DW     LPAREN
3434 QUIT:           .DW     CALL
3435 RQUIT:          .DW BLK,ZSTORE, LBRAC
3436 QUI:            .DW RPSTO, CR, QUERY, INTER, STATE,UAT
3437                 .DW ZEQU, ZBRAN,QUI, PDOTQ
3438                 .DB 3
3439                 .TEXT " ok"                     ; Это приглашение не будет видно при 2 FONT!
3440                 .DW BRAN,QUI

Реализация из SP-Forth 4.20:

: MAIN1 ( -- )
  BEGIN
    REFILL
  WHILE
    INTERPRET OK
  REPEAT BYE
;

: QUIT ( -- ) ( R: i*x ) \ CORE 94
\ Сбросить стек возвратов, записать ноль в SOURCE-ID.
\ Установить стандартный входной поток и состояние интерпретации.
\ Не выводить сообщений. Повторять следующее:
\ - Принять строку из входного потока во входной буфер, обнулить >IN
\   и интепретировать.
\ - Вывести зависящее от реализации системное приглашение, если
\   система находится в состоянии интерпретации, все процессы завершены,
\   и нет неоднозначных ситуаций.
  BEGIN
    CONSOLE-HANDLES
    0 TO SOURCE-ID
    0 TO SOURCE-ID-XT
    [COMPILE] [
    ['] MAIN1 CATCH
    ['] ERROR CATCH DROP
 (  R0 @ RP! \ стек не сбрасываем, т.к. это за нас делает CATCH :)
    S0 @ SP! \ стек    сбрасываем, т.к. OPTIONS может оставить значения :(
  AGAIN
;

Советская реализация[править]

Юрий Семёнов приводит следующее определение слова QUIT через QUERY и INTERPRET (стр. 56):

 : QUIT   0 BLK !                  ( переход в пультовый режим)
          [                      ( установка режима исполнения)
          BEGIN         ( начало  бесконечного  цикла ожидания)
          !RP         ( установка указателя возвратного стека в
                        начальное состояние)
          ↵ QUERY    ( приглашение ввести команду с терминала)
          INTERPRET       ( интерпретация и исполнение команды)
          STATE @ 0= IF ." OK"      ( сообщение о благополучном
                              выполнении в режиме "исполнения")
                     THEN 0  ( засылка 0 для поддержания цикла)
          UNTIL ;

Оно же, с использованием слова 0! и цикла BEGINAGAIN:

 : QUIT   BLK 0!                   ( переход в пультовый режим)
          [                      ( установка режима исполнения)
          BEGIN         ( начало  бесконечного  цикла ожидания)
            !RP       ( установка указателя возвратного стека в
                        начальное состояние)
            ↵ QUERY  ( приглашение ввести команду с терминала)
            INTERPRET     ( интерпретация и исполнение команды)
            STATE @ 0= IF ." OK"    ( сообщение о благополучном
                              выполнении в режиме "исполнения")
                       THEN
          AGAIN ;

У Баранова-Ноздрунова определение слова QUIT выглядит так (стр. 81):

: QUIT  ( ---> )
  BEGIN  ↵  ." >"  ( Приглашение к вводу)
     TIB  80 EXPECT ( Ввести текст с терминала)
     SPAN  @  #TIB  ! ( Установить его длину)
  0 TIB  #TIB @ +  C! ( Установить ограничитель)
  0  >IN !  0  BLK ! ( Установить входной поток)
   INTERPRET ( Интерпретировать введённый текст)
    STATE @  0=  IF ." OK" THEN ( Подтверждение)
  AGAIN  ;

В ядре ФОРТ-ЕС слово QUIT называлось ФОРТ-СИСТЕМА

Вот его описание и определение:

ФОРТ-СИСТЕМА * -> ТЕКСТОВЫЙ ИНТЕРПРЕТАТОР ФОРТ-СИСТЕМЫ          40

                     Экран номер 40
( 31.03.84      EXPECT  OUERY INTERPRET  ФОРТ-СИСТЕМА  X )

: ФОРТ-СИСТЕМА  ( ->) BEGIN QUERY INTERPRET  AGAIN ;

Определение слова QUIT в FORTH ИТЭФ:

             HEAD    204Q,'QUI',324Q,QUIT,$COL            ; QUIT
             DW  ZERO,BLK,STORE,LBRAC
   QUI:      DW  RPSTO,CR,QUERY,INTER,STATE,AT
             DW  ZEQU,ZBRAN,QUI-$,PDOTQ
             DB  3,'  OK'
             DW  BRAN,QUI-$

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


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


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