Векторное поле кода: различия между версиями

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


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


Разработчик ''векторного поля кода'' должен не только хорошо понимать работу механизма [[⟨BUILDS|<BUILDS]]…[[DOES⟩|DOES>]] и адресного интерпретатора, но и изучить их реализацию в [[Каллисто]].
Разработчик ''векторного поля кода'' должен не только хорошо понимать работу механизма [[⟨BUILDS|<BUILDS]]…[[DOES⟩|DOES>]] и адресного интерпретатора, но и изучить их реализацию в [[Каллисто]].

Версия от 07:27, 25 марта 2016

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

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

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

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

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

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

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


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