Векторное поле кода: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 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 снятое со стека число.
В Форте обработчики векторного поля кода всегда являются примитивами. На ЭКВМ примитивы должны быть расположены в памяти программ. Поэтому разработка собственных примитивов на Каллисто требует изменения исходного текста Каллисто с последующей его компиляцией на компьютере.
К счастью, обработчик поля параметров может быть написан на Каллисто. Для этого соответствующий ему элемент векторного поля кода должен занимать две ячейки, хранящие две ссылки — на адресный интерпретатор Каллисто (в памяти программ) и на шитый код этого обработчика (может находиться в байтовых регистрах).
Разработчик векторного поля кода должен не только хорошо понимать работу механизма <BUILDS…DOES> и адресного интерпретатора, но и изучить их реализацию в Каллисто.
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |