Sat Jul 01 2006 09:57, Pavel Grishin wrote to Alex Kouznetsov:
PG>>> СЛОВАРЬ - он и в Си словаpь. (я этy стоpкy подчёpкиваю) PG>>> Повтоpюсь. Беpи пpимитивы и pасти словаpь/пpогy кyда надо. PG>>> _ФОРТ_очень_компактен_. И эта фpаза не с пyстого места - это PG>>> главный аpгyмент ФОРТА!
AK>> Hе надо лозунгов и агиток, просто ответь на вопрос: что умеет твое AK>> ядро в 100-500 байт?
PG> Что yмеет AVR имея только ASM? Ядpо - это движок.
Ты опять не ответил на прямо поставленный вопрос. Теперь слушай сюда:
-- В 100-500 байт полноценный Форт поставить вообще нельзя, ни на каком процессоре, даже на стековом.
-- Словарь Форта довольно неэкономен, поскольку в каждом словарном определении хранит много дополнительной информации. За счет этого обычная сишная или ассемблерная библиотека той же функциональности занимает места меньше.
-- То, что в Форте называют "внутренним интерпретатором" (или "интерпретатором виртуальной Форт-машины"), для экономии места может быть отделено от остального Форта. Это иногда используется во встраиваемых системах. В таком случае применяется кросс-компиляция.
-- Размер внутреннего интерпретатора (или интерпретатора виртуальной Форт-машины, или интерпретатора FVM) зависит от многих вещей, наиболее важны из них три: (1) от типа используемого кода; (2) от количества элементарных слов (команд), известных внутреннему интерпретатору; (3) от разрядности виртуальной машины.
-- Обычно Форт делается 16-разрядным или 32-разрядным. Чтобы уменьшить размер интерпретатора, будем делать 8-разрядный недо-Форт.
-- Чаще всего используют один из трех типов кода: непрямой прямой шитый код, прямой шитый код и подпрограммный шитый код. Размер диспетчера, вызывающего элементарные слова, от этого сильно зависит. Для подпрограммного шитого кода размер диспетчера минимален и равен нулю, зато размер интерпретируемого кода обычно максимален, а выполняется он быстро. Для непрямого шитого кода картина обратная: сам интерпретируемый код будет иметь минимальный размер, зато диспетчер будет большой и сравнительно медленный.
-- Для построения интерпретатора FVM нужно, чтобы виртуальная машина могла исполнять примерно 50 команд. Этого будет мало для удобного написания программ на Форте, однако к этому базису можно будет добавить новые слова в виде скриптов.
-- Тело каждой FVM команды состоит из нескольких ассемблерных команд, от 5 до
100, в среднем примерно 10...20. Так что на 50 команд FVM потребуется не менее
500 ассемблерных команд, т.е. вся имеющаяся память PIC10F.
-- Далее следует рассмотреть, сколько ассемблерных команд потребуется для манипуляций со стеками. В PIC это делается ужасно криво и требует не менее десятка ассемблерных команд на каждую примитивную операцию (можешь проверить сам). В старших PIC-ах с этим еще как-то можно жить, поскольку эти операции можно оформить в виде подпрограмм. Однако в PIC10F всего лишь двухуровневый стек. Один уровень тратится на вызов FVM команды (поскольку подпрограммный шитый код), значит, в теле каждой FVM команды можно вызывать только "плоские" подпрограммы, а сами эти подпрограммы, соответственно, раздуваются до невообразимых размеров. Набор "плоских" примитивов для работы со стеком займет примерно 100-200 ассемблерных команд. Поскольку память PIC10F мы уже израсходовали, то эти команды девать просто некуда.
-- Итак, израсходовав примерно 600-700 команд мы получили всего лишь простейший интерпретатор FVM. Вот с этой точки можешь начинать строить словарь, пока что он равен нулю. Однако сначала тебе придется достроить словарь Форта до приемлемого, т.к. из обиходных слов у нас есть всего лишь 50 самых примитивных.
Пока, Алексей