Здравствуйте, Gaperton, Вы писали:
G>Я в курсах, я знаю форт хорошо. Писал несколько форт-машин сам в разное время. Последнее время я его использую в качестве движка выполнения для разнообразных кастомных скриптовых языков (считаю это самым простым способом из известных организовать рантайм).
Можно ссылочки на такие проекты?
Интересно увидеть подобные реализации.
G>Но мне не хватало производительности шитого кода — а здесь — компиляция.
Огромное спасибо, это мега-тулза.
Тут ещё такой прикол: т.к. компиляция в машкод, можно отвлечься от чисто стековой архитектуры и приплести использование других регистров процессора, включая все РОН, регистры MMX, SSE, FPU.
Насчёт скорости.
Т.к. компиляция происходит на лету, указатели можно прошивать в код, ускоряя этим работу.
В Retroforth есть 2 словаря: forth и macro.
При компиляции слова, если оно найдено в словаре macro, оно сразу же исполняется.
Это аналог IMMEDIATE в других фортах.
И фишка в том, что в тех фортах СЛОВО либо IMMEDIATE, либо нет, а в Retroforth могут присутствовать сразу обе версии слова, позволяя одному слову исполняться в диалоговом режиме и инлайниться в код при компиляции.
Регистровая модель взята из ColorForth. Т.е. код ничем не отличается от любого бинарника, кроме соглашения о стековой архитектуре, где используются только лишь регистры eax, esi и esp.
см. TheRetroBook.txt.
Register Use
-------------------------------
EAX Top of Stack
ESI Data Stack
[ESI] Second item on Stack
ESP Return Stack
-------------------------------
G>Кстати, какая на нее лицензия?
Абсолютно свободная. Тип лицензии — public domain. Т.е. делаешь всё, что хочешь.
см. на том сайте
www.retroforth.org раздел про лицензию.
Моя версия ref и giref также абсолютно свободна.
Единственное требование — не убирать информацию об авторе.
И ещё.
Разрабатываемая сейчас версия RetroForth 8 более лажовая, чем 7.6.
ИМХО, лучше за отправную точку взять v7.6, к ней приплюсовать модули из ref.
Или юзать ref, где также можно поместить все модули в один exe/dll.