VARIABLE

Материал из ПМК вики
Версия от 18:51, 13 ноября 2017; AtH (обсуждение | вклад) (→‎Реализация)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

VARIABLE (переменная) — стандартное порождающее слово Каллисто.

VARIABLE       ( −− )                               Определить следующее слово, как переменную с начальным значением 0.
Пример работы слова VARIABLE

Определить следующее слово как глобальную (язык Си: статичную) 16-битную переменную с начальным значением нуль.

Слово VARIABLE оставлено для совместимости с Фортом. Вместо него при разработке приложений рекомендуется использовать более современное и мощное слово VALUE.

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

В режиме ЛАТ последовательно нажмите клавиши     ШГ←   ×   7   ШГ←   В/О      ИП 

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

 6.1.2410   VARIABLE                                                        CORE
            ( "<spaces>name" -- )
            Пропускает ведущие разделители пробелы. Выделяет name, ограниченное 
            пробелом. Создает определение для name с семантикой выполнения, 
            определенной ниже. Резервирует одну ячейку области данных в 
            выровненном адресе.

            name объявляется как "variable".

        name Выполнение: ( -- a-addr )
            a-addr - адрес зарезервированной ячейки. Программа ответственна за 
            инициализацию и содержание зарезервированной ячейки.

        См.: 3.4.1 Синтаксический анализ.

 A.6.1.2410   VARIABLE
 Типичное использование:
        ... VARIABLE XYZ ...

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

В Форте слово VARIABLE — одно из самых древних и устоявшихся.

Впервые оно появилось в 1964 году под именем DECLARE в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 (Национальная ускорительная лаборатория SLAC, Стэнфордский университет). Совместно с VARIABLE работал оператор !, но считывание (@) было автоматическим.

В MMSFORTH было слово CVARIABLE для определения переменных размером в байт.

Начиная с Форта-79, определение целочисленной переменной VARIABLE не требует задания начального значения и не меняет стек.

Это изменение появилось в microFORTH — Форте для 8-битных микропроцессоров, ядро которого часто размещали в ПЗУ. Переменные VARIABLE начали поддерживать системы с раздельным адресным пространством ПЗУ и ОЗУ. Возможность задания начального значения в VARIABLE была убрана из-за сложности инициализации ОЗУ во время компиляции ПЗУ без создания «теневой» таблицы — пространство ПЗУ сочли слишком ценным для этого.

Каллисто и большинство версий Форта записывают в созданную переменную ноль, но если вам важна совместимость с Фортом, полагаться на эту особенность не следует.

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

     VARIABLE     --                            M,79
          A defining word executed in the form:
                  VARIABLE <name>
          A dictionary entry for <name> is created and two bytes are
          ALLOTted in its parameter field.  This parameter field is to
          be used for contents of the variable.  The application is
          responsible for initializing the contents of the variable
          which it creates.  When <name> is later executed, the
          address of its parameter field is placed on the stack.

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

VARIABLE                                     227
    A defining word executed in the form:
         VARIABLE  <name>
    to  create a dictionary entry for <name> and allot  two  bytes
    for  storage  in the parameter field.   The  application  must
    initialize  the stored value.   When <name> is later executed,
    it will place the storage address on the stack.

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

VARIABLE                                     E,LU
       A defining word used in the form:
                         n VARIABLE cccc
       When VARIABLE is executed, it creates the definition cccc with its
       parameter field initialized to n. When cccc is later executed, the
       address of its parameter field (containing n) is left on the stack,
       so that a fetch or store may access this location.

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

2532 ;#VARIABLE
2533 ; VARIABLE         ( −− )                               Определить следующее слово, как переменную с начальным значением 0.
2534 LVAR:           .DB     8
2535                 .TEXT   "VARIABLE"              ; ( "<пр>имя" −− )
2536                 .DW     LCON
2537 VAR:            .DW CALL, CREAT,ZERO,COMMA, EXIT ; Действие по умолчание от CREATE нам вполне подходит.

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

: VARIABLE ( "<spaces>name" -- ) \ 94
  [T] HEADER [I]
  CREATE-CODE COMPILE,
  0 ,
;
: VARIABLE ( "<spaces>name" -- ) \ 94
\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом.
\ Создать определение для name с семантикой выполнения, данной ниже.
\ Зарезервировать одну ячейку пространства данных с выровненным адресом.
\ name используется как "переменная".
\ name Выполнение: ( -- a-addr )
\ a-addr - адрес зарезервированной ячейки. За инициализацию ячейки отвечает 
\ программа
  CREATE
  0 ,
;

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

У Баранова-Ноздрунова приводятся два следующих описания слова VARIABLE (стр. 24):

 : VARIABLE   ( ---> )    CREATE 2 ALLOT ;
 : VARIABLE   ( ---> )    CREATE 0 , ;

Второе описание также используется в 11-й главе Starting FORTH (англ.):

  : VARIABLE  CREATE  0 , ;

Описание и определение слова VARIABLE в ядре ФОРТ-ЕС:

VARIABLE     -> ОПРЕДЕЛИТЬ СЛЕДУЮЩЕЕ СЛОВО KАK                 32
             ПЕРЕМЕННУЮ С НАЧАЛЬНЫМ ЗНАЧЕНИЕМ НУЛЬ

                     Экран номер 32
( 31.03.86   CONSTANT  VARIABLE 2CONSTANT  2VARIABLE  : ; )

: VARIABLE  ( -> ) CREATE 0 , ;

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

            HEAD     210Q, 'VARIABL',305Q,VAR,$COL        ; VARIABLE
            DW CON,PSCOD
   $VAR     LABEL   FAR
            ADD  BX, 2
            PUSH BX
            NEXT

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


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