Язык Форт и его реализации



             

Векторное поле кода


В языке Форт с каждым словом-командой связано некоторое действие, определяющее семантику данного слова. В словарной статье, которая является внутренним представлением форт-слова, это действие задано через поле кода. В случае косвенного шитого кода оно содержит адрес машинной программы, исполнение которой и составляет действие данного слова. Эта программа образует исполняющую часть определяющего слова, через которое данное слово было создано, и параметризуется адресом поля параметров его словарной статьи.

Описанный механизм является чрезвычайно мощным и в то же время очень компактным в реализации. Вместе с тем и он может быть улучшен с учетом конкретной цели. Заметим, что этот механизм предписывает исполнение одной и той же программы для всех случаев применения данного слова, в то время как в каждом случае слово употребляется в определенном контексте, и его исполнение, вообще говоря, зависит от этого контекста. Разумеется, анализ контекста можно включить в программу слова, если закодировать контекст через дополнительный параметр или глобальную переменную.

Именно в этом, например, заключается действие стандартного слова LITERAL, которое анализирует текущее состояние текстового интерпретатора через значение переменной STATE. Если это значение — нуль (состояние исполнения), то это слово больше ничего не делает. При ненулевом значении (состояние компиляции) оно снимает значение с вершины стека и компилирует его как литерал на вершину словаря.

Пример другого подхода дает описанная в реализация оператора присваивания в традиционной инфиксной форме записи. В зависимости от текущего значения переменной ?ЗНАЧ, которое изменяется словами := и ;, слова, обозначающие переменные, оставляют на стеке либо адрес, либо значение данной переменной.

Предлагаемое улучшение связано прежде всего с использованием переменных. В стандартном определении при исполнении переменной на стеке будет оставлен адрес ячейки (поля параметров), в которой хранится ее значение. Однако сам по себе этот адрес редко бывает нужен, обычно он используется либо для получения текущего значения переменной с помощью слова @, либо для засылки в нее нового значения словом !.


Содержание  Назад  Вперед