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



         

Целевая компиляция и модель форт-системы - часть 3


Для решения этой задачи обычно поступают следующим образом. В списке слов целевой компиляции переопределяют все стандартные определяющие слова (:, CONSTANT, VARIABLE, CODE и т.д.) таким образом, чтобы они строили две статьи: одну стандартным образом, но в целевом адресном пространстве, а другую — специальным образом — в инструментальном. Исполнение инструментальной статьи компилирует ссылку, соответствующую целевой статье данного слова, как очередной элемент шитого кода на вершину целевого словаря. Обрабатывая стандартным текстовым интерпретатором высокоуровневое определение в контексте таких инструментальных определений, мы получаем в целевом пространстве соответствующий шитый код. Аналогичным образом должны быть переопределены и все слова с признаком немедленного исполнения, реализующие структуры управления и выполняющие какую-либо компиляцию во время обработки определений (IF, THEN, ; и т.д.). Эти слова в отличие от их стандартных прототипов должны компилировать статьи и переходы для целевого адресного пространства, а не инструментального. Совокупность перечисленных определений и образует целевой компилятор.

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




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