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

         

Динамическая идентификация


Внутренним представлением форт-слова является словарная статья, которая размещается в словаре. Через поля связи словарные статьи объединяются в цепные списки, каждый из которых также представлен как отдельный объект словарной статьей, создаваемой по слову VOCABULARY. Исполнение слова, обозначающего такой список, делает его текущим значением переменной CONTEXT, определяющей список, в котором начинается поиск каждого вводимого форт-слова. Если слово отсутствует в этом списке, то следующим просматривается список, в который добавляются создаваемые новые статьи, текущее значение переменной CURRENT. Последним просматривается стандартный список FORTH. Если текстовый интерпретатор находится в состоянии исполнения, то найденный код исполняется, в состоянии компиляции он компилируется в виде ссылки на данную словарную статью для последующего исполнения в составе скомпилированного определения.

Таким образом, в процессе создания нового определения мы индентифицируем составляющие его слова статически, т.е. по текущему контексту (значениям переменных CONTEXT и CURRENT) во время компиляции. Во время исполнения этого определения будут исполняться именно эти, найденные во время компиляции составляющие слова. Вместе с тем в практике программирования уже давно применяется прием, известный как динамическая идентификация. В применении к языку Форт он состоит в том, что вместо компиляции ссылки на статью слова по результату статической индентификации в компилируемой статье запоминается имя слова, и его поиск ведется в момент фактического исполнения. Главная особенность состоит в том, что контекст для поиска также устанавливается динамически в результате предшествующих вычислений.

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


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