VARIABLE
VARIABLE (переменная) — стандартное порождающее слово Каллисто.
VARIABLE ( −− ) Определить следующее слово, как переменную с начальным значением 0.
Определить следующее слово как глобальную (язык Си: статичную) 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
Ссылки[править]
- Исходный текст слова VARIABLE в Каллисто Классик 1.0
- См. также слова CONSTANT, FVARIABLE и VALUE
- Слово VARIABLE и комментарий к нему в стандарте ANS Forth (англ.)
- Слово VARIABLE и комментарий к нему в черновике Forth 200x (англ.)
- ПЕРЕМЕННЫЕ, КОНСТАНТЫ И МАССИВЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Variables, Constants, and Arrays в книге Leo Brodie Starting Forth (англ.)
- Extending the Compiler в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |