Учебное пособие по языку ФОРТ
- Автор: ИТФ «Технофорт»
- Жанр: Современные российские издания / Литература ХX века (эпоха Социальных революций) / Программирование: прочее / Forth
- Дата выхода: 1993
Читать книгу "Учебное пособие по языку ФОРТ"
20. Переменные типа "QUAN" и "VECT"
Переменная типа "QUAN" отличается от стандартной переменной типа "VARIABLE" тем, что объединяет свойства константы и переменной. При исполнении переменная типа "VARIABLE" оставляет на стеке адрес ячейки, в которой хранится ее значение. Но этот адрес обычно используется либо для получения самого значения с помощью слова "@", либо для засылки в переменную нового значения с помощью слова "!". Так вот слово "QUAN" создает переменную, исполнение имени которой в зависимости от контекста имеет один из трех результатов: получение текущего значения, засылка нового значения и получение адреса значения.
Переменная типа "QUAN" определяется следующим образом:
QUAN имя
Слово "IS", употребленное перед именем переменной, засылает в переменную новое значение, взятое с вершины стека.
Слово "AT", употребленное перед именем переменной, записывает в стек адрес ее значения.
Слова "IS" и "AT" назовем префиксами к имени переменной.
При использовании имени переменной без префиксов на стек будет помещено ее текущее значение (свойство константы). Заметим, что использование "чистого" имени эквивалентно: AT имя @ a засылка при помощи "IS" эквивалентна выражению: AT имя !
Слово для реализации переменной типа "QUAN" имеет три поля кода:
1. поле кода для получения значения (2/3 байта)
2. поле кода для засылки значения (2/3 байта)
3. поле кода для получения адреса значения (2/3 байта)
4. значение переменной (2 байта)
Длина поля кода зависит от типа шитого кода, но в любом случае требуются два дополнительных поля кода. Эти затраты памяти на описание переменной компенсируются при ее использовании, так как каждое обращение к переменной занимает два байта и к тому же работает быстрее, чем обращение к переменной типа "VARIABLE". Это объясняется тем, что на месте использования переменной типа "QUAN" компилируется адрес одного из трех полей ее кода в зависимости от указанного префиксом (или его отсутствием) действия:
-------------------------------------------------------------
действие для QUAN для VARIABLE
-------------------------------------------------------------
значение имя (2 байта) имя @ (4 байта)
присваивание IS имя (2 байта) имя ! (4 байта)
адрес AT имя (2 байта) имя (2 байта)
-------------------------------------------------------------
По аналогии co словом "QUAN" используется слово "VECT", создающее слово с векторизованным исполнением. Его можно рассматривать как переменную типа "QUAN", значением которой являются другие слова. Например, после выполнения текста
VECT имя
' DUP IS имя
последующее исполнение слова "имя" равносильно исполнению "DUP". Таким образом, созданные при помощи "VECT" слова можно рассматривать как слова co сменной семантикой. Отличие реализаций "VECT" и "QUAN" состоит лишь в следующем: исполнение имени переменной типа "VECT" вызывает выполнение слова, адрес поля кода которого содержит переменная. Префиксы используются аналогичным образом.