Re[9]: Ссылки по Форту
От: Gaperton http://gaperton.livejournal.com
Дата: 06.03.05 00:46
Оценка:
Здравствуйте, DJ KARIES, Вы писали:

DK>Здравствуйте, Gaperton, Вы писали:


G>>Я в курсах, я знаю форт хорошо. Писал несколько форт-машин сам в разное время. Последнее время я его использую в качестве движка выполнения для разнообразных кастомных скриптовых языков (считаю это самым простым способом из известных организовать рантайм).

DK>Можно ссылочки на такие проекты?
DK>Интересно увидеть подобные реализации.

1-я реализация, которую я делал, была для ZX Spectrum . Ничего особенного — применив непосредственный шитый код (команда — прямая ссылка на ассемблер) я порвал FigForth на 30% (там классика — косвенный шитый код). Просто было любопытно — проект для себя. Не сохранился.

2-я реализация — если так можно назвать — курсовая в универе сделаная за пару дней — SQL Server (спокойно!) реализующий подмножество SQL. Времени было мало (по разгильдяйству), и в качестве рантайма для выполения запросов была за несколько часов (рука уже набита — почти по памяти) реализована простая минимально необходимая форт-машина на С. Подход себя оправдал — дешево, и очень быстро. Проект не сохранился — учебная задача на выброс.

3-я реализация — подсистема выполнения встроенного языка системы CQG (простой язык обработки временных рядов). Старая зело тормозила, была разработана схема компиляции языка в фортовый байт-код (опять же, была написана своя машинка на С++ с соблюдением духа и идеологии Форт). Еще раз подтвердилось, что форт-машина — самый дешевый способ писать рантайм для скриптовых языков. Код дать не могу — non-disclosure agreement. Да и машинка там была проста и классична — абсолютно ничего интересного, все стандартно.

G>>Но мне не хватало производительности шитого кода — а здесь — компиляция. Огромное спасибо, это мега-тулза.

DK>Тут ещё такой прикол: т.к. компиляция в машкод, можно отвлечься от чисто стековой архитектуры и приплести использование других регистров процессора, включая все РОН, регистры MMX, SSE, FPU.

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

DK>Насчёт скорости.

DK>Т.к. компиляция происходит на лету, указатели можно прошивать в код, ускоряя этим работу.
Кстати, а что именно подразумевается под компиляцией в native код? Инлайн слов, определенных на ассемблере, + "прямой" шитый код (вызовы JMP word_address)? А как насчет стека — делает ли он честную раскладку по регистрам для арифметики?

DK>В Retroforth есть 2 словаря: forth и macro.

DK>При компиляции слова, если оно найдено в словаре macro, оно сразу же исполняется.
DK>Это аналог IMMEDIATE в других фортах.

Разница несущественна, ИМХО. Будет слово лежать в отдельном словаре, или ему будет выставлен признак IMMEDIATE — не суть. Хотя словарь дает дополнительную возможность контроля, так наверно лучше.

DK>И фишка в том, что в тех фортах СЛОВО либо IMMEDIATE, либо нет, а в Retroforth могут присутствовать сразу обе

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

DK>Регистровая модель взята из ColorForth. Т.е. код ничем не отличается от любого бинарника, кроме соглашения о стековой архитектуре, где используются только лишь регистры eax, esi и esp.

DK>см. TheRetroBook.txt.
DK>

Register Use
DK> -------------------------------
DK> EAX Top of Stack
DK> ESI Data Stack
DK> [ESI] Second item on Stack
DK> ESP Return Stack
DK> -------------------------------


G>>Кстати, какая на нее лицензия?

DK>Абсолютно свободная. Тип лицензии — public domain. Т.е. делаешь всё, что хочешь.
DK>см. на том сайте www.retroforth.org раздел про лицензию.

DK>Моя версия ref и giref также абсолютно свободна.

DK>Единственное требование — не убирать информацию об авторе.
Нивапрос . Надо будет — еще и бабок отстегнем. Впрочем, пока такого проекта не планируется, так что на бабки рассчитывать не надо.

DK>И ещё.

DK>Разрабатываемая сейчас версия RetroForth 8 более лажовая, чем 7.6.
DK>ИМХО, лучше за отправную точку взять v7.6, к ней приплюсовать модули из ref.
DK>Или юзать ref, где также можно поместить все модули в один exe/dll.
Спасибо. Буду иметь этот замечательный проект в виду.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.