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



             

Стек возвратови реализация структур управления


Один из важных принципов языка Форт состоит в том, чтобы предоставить программисту максимальный доступ ко всем средствам его реализации. В соответствии с этим принципом собственные данные адресного интерпретатора — стек возвратов — были сделаны доступными, для чего введены специальные слова: >R A -->, R> --> А и R@ --> A. Буква R (от RETURN — возврат) в имени этих слов напоминает о том, что они работают со стеком возвратов. Все эти слова можно использовать только внутри компилируемых определений. Во время исполнения любого такого определения, представленного в шитом коде как подпрограмма верхнего уровня, на вершине стека возвратов находится адрес того места, откуда данное определение было вызвано (адрес возврата). Это значение было помещено туда действием CALL при входе в данное определение. Адрес возврата будет снят со стека возвратов и использован для продолжения интерпретации действием RETURN, составляющим семантику слова EXIT.

Перечисленные слова позволяют программисту вмешиваться в описанный механизм вызова, реализуя свои собственные схемы передач управления, и, кроме того, использовать стек возвратов для хранения временных данных в пределах одного определения (все положенные на стек возвратов значения должны быть сняты с него перед выходом из определения). Однако неосторожное манипулирование стеком возврата может вызвать непредсказуемые последствия, вплоть до разрушения форт-системы. Слово >R (читается «на эр») переносит значения с вершины стека данных на стек возвратов. Обратное действие выполняет слово R> (читается «с эр»). Слово R@ (читается «эр разыменовать») копирует вершину стека возвратов на стек данных, сохраняя это значение на стеке возвратов.

С помощью описанных слов легко определить, например, приведенное выше слово LIT, компилируемое в шитый код вместе со следующим за ним значением, чтобы во время счета положить это значение на стек данных:

: LIT ( --> A ) R@ @ R> 2+ >R ;




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