в свою очередь выполняя две
Исполняется слово
VARIABLE, в свою очередь выполняя две функции:
CREATE. Создает с помощью
CREATE заголовок в словаре с именем АПЕЛЬСИНЫ и указателем кода, который ссылается на код периода выполнения слова
CREATE;
0, Засылает 16-разрядный нуль в поле параметров вновь созданной переменной и выделяет ячейку памяти.
АПЕЛЬСИНЫ
Исполняется слово АПЕЛЬСИНЫ. Так как указатель кода слова АПЕЛЬСИНЫ ссылается на код периода выполнения
CREATE, pfa этого слова помещается в вершину стека. Конечно, мы могли бы обойтись без слова
VARIABLE. Вполне достаточно ввести следующее: CREATE ПРИМЕР 0 ,
Однако такая запись менее изящна, поскольку здесь разбиты на отдельные действия создание заголовка и выделение памяти. Пример с определением слова
VARIABLE демонстрирует лишь половину возможностей механизма определяющих слов. Если бы мы вместо
VARIABLE воспользовались словом
CREATE, то нам пришлось бы подкорректировать единственное место - в фазе 1, где происходит определение слова АПЕЛЬСИНЫ. И напротив, в фазе 3 слово АПЕЛЬСИНЫ вело бы себя одинаково при определении посредством как
CREATE, так и
VARIABLE.
Кроме того, Форт дает возможность создавать определяющие слова-родители, задающие поведение своих детей во время исполнения. Ниже в качестве примера приводится правильное определение слова
CONSTANT (хотя на самом деле слова, подобные
VARIABLE и
CONSTANT, обычно определяются с помощью машинных кодов):: CONSTANT CREATE , DOES> @ ;
Здесь «собака зарыта» в выполнении слова
DOES>, которое отмечает начало кода периода выполнения для всех своих детей. Как вы знаете, константы (т.е. дети определяющего слова
CONSTANT) засылают в стек свои значения, которые хранятся в их поле параметров. Поэтому слово @, которое следует за
DOES>, выбирает значение константы из ее собственного pfa.
В любом определяющем слове
CREATE отмечает начало действий, выполняемых в период компиляции (фаза 2), a
DOES> - конец действий периода компиляции и начало операций периода выполнения (фаза 3).
Содержание Назад Вперед