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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

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

Например, десятичные величины, созданные порождающим словом VALUE имеют 4-байтное векторное поле кода с двумя элементами. Обозначим их адреса CFA1 (первая ячейка тела словарной статьи) и CFA2 (вторая ячейка тела словарной статьи), а их содержимое (16-битные адреса исполняемого кода в памяти программ) PRG1 и PRG2 соответственно. Поле параметров десятичной величины состоит из одной ячейки, которая содержит N — номер десятичного регистра, хранящего значение данной десятичной величины.

Текстовый интерпретатор ничего не знает о векторном поле кода. Когда компилятор встречает имя десятичной величины, он просто компилирует (записывает в словарь) адрес начала поля кода, то есть CFA1. Адресный интерпретатор, исполнив этот код, вызовет программу PRG1, считывающую в стек регистр N. В режиме интерпретации текстовый интерпретатор сам передаст управление PRG1.

О векторном поле кода осведомлено слово TO, которое компилирует CFA2 (адрес второго элемента векторного поля кода) или само передаёт управление программе PRG2, записывающей в регистр N снятое со стека число.

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

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

Разработчик векторного поля кода должен не только хорошо понимать работу механизма <BUILDSDOES> и адресного интерпретатора, но и изучить их реализацию в Каллисто.


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.