SMUDGE

Материал из ПМК вики
Перейти к: навигация, поиск

SMUDGE — стандартное слово Каллисто. Сделать слово видимым/невидимым.

SMUDGE         ( −− )                               Изменить признак видимости последней созданной статьи.

Изменить флаг "SMUDGE" последней созданной статьи.

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

В режиме ЛАТ последовательно нажмите клавиши  1   ÷   3   K   БП   ИП 

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

В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово SMUDGE

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

В FORTH ИТЭФ слово называется SMUG

В других реализациях вместо SMUDGE есть слова HIDE и REVEAL — устанавливающие и сбрасывающие бит невидимости.

В некоторых системах маска бита невидимости представляет собой константа &HIDDEN

В colorForth Чак Мур отказался от признака невидимости и специальных слов для организации явных циклов. Определяемое слово сразу доступно для рекурсии. За счёт того, что в colorForth ; меняет последний вызов на безусловный переход (оптимизация хвостовой рекурсии), следующая последовательность компилируется в цикл:

: СЛОВО … IF … СЛОВО ; THEN … ;

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

SMUDGE
       Used during word definition to toggle the "smudge bit" in a
       definitions' name field. This prevents an uncompleted definition
       from being found during dictionary searches, until compiling is
       completed without error.

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

3064 ;#SMUDGE
3065 ; SMUDGE           ( −− )                               Изменить признак невидимости последней созданной статьи.
3066 LSMUG:          .DB     6
3067                 .TEXT   "SMUDGE"
3068                 .DW     LCOMP                   ; Изменить флаг "SMUDGE" в последней созданной статье.
3069 SMUG:           .DW CALL                        ; LAST BL TOGGLE
3070 RSMUG:          .DW LATES,BL,TOGL, EXIT         ; BL == 32

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

USER C-SMUDGE \ 12 C,

\ smudge исправлено ~nemnick 29.11.2000
: SMUDGE ( -- )
  LATEST
  IF C-SMUDGE C@
     LATEST 1+ C@ C-SMUDGE C!
     LATEST 1+ C!
  THEN ;

: HIDE
  12 C-SMUDGE C! SMUDGE
;
…
: REVEAL SMUDGE ;

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

Юрий Семёнов приводит следующее определение слова SMUDGE (стр. 71):

 : SMUDGE   LAST BL TOGGLE ;

Можно заметить, что при таком определении слово BL используется не по прямому назначению (получение кода пробела), а как битовая карта, в которой признак невидимости является единственным установленным битом.

Ядро ФОРТ-ЕС использовал слова SMUDGE и UNSMUDGE

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

SMUDGE   *-> УСТАНОВИТЬ В ЕДИНИЦУ ФЛАГ "SMUDGE"                 31
             В ПОСЛЕДНЕЙ СОЗДАННОЙ СТАТЬЕ
UNSMUDGE  *  -> УСТАНОВИТЬ В НУЛЬ ФЛАГ "SMUDGE"                31
             В ПОСЛЕДНЕЙ СОЗДАННОЙ СТАТЬЕ

                     Экран номер 31
( 31.03.86    LATEST DEFINITIONS SMUDGE UNSMUDGE IMMEDIATE ID.)

: SMUDGE  ( ->)    LATEST С@ [ &SFLAG ] LITERAL OR LATEST C! ;
: UNSMUDGE ( ->)   LATEST С@ [ 255 &SFLAG - ] LITERAL AND LATEST С! ;

Слово SMUDGE в FORTH ИТЭФ называлось SMUG

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

             HEAD    204Q,'SMU',307Q,SMUG,$COL            ; SMUDGE
             DW  LATES,BLAN,TOGL,SEMI

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


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


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