Murkt> Или сам расскажи
В двух словах там, действительно, всё просто. Есть байткод (типично Фортовский, кстати, стековый - DUP/SWAP/ADD и т.д.). Каждому методу при вызове формируется отдельный стек и область локальных переменных. И то и другое - заказанного размера. Аргументы метода - тоже локальные переменные. Соответственно, в байткоде есть операции чтения такой переменной. Или field'а какого-либо класса. Или вызова статического или виртуального метода. И т.п.
Проблемы в том, что нет общего стека на всю систему. JVM сама снимает для вызываемого метода со стека аргументы. Соответственно, и число аргументов всегда фиксированное. Возвращаться может только одно значение. Хотя прописаться может с любого места.
Сейчас вижу три (выше писал - два) выхода:
- Делать глобальный стек в виде отдельного класса, как сейчас в JBForth. Но тогда, во-первых, сильно снизится скорость (грубо говоря вместо байтоперации SWAP будем вызывать метод чужого класса, который будет работать с чужими данными). Во-вторых (впрочем, это тоже самое) пропадёт возможность использования массы байткода. Промежуточное решение - делать Форт не кодогенерирующий, а классический. А низкоуровневые слова определять через CODE, как в классическом Форт-ассемблере. Уже внутри этих слов использовать как глобальный, так и локальный стеки в зависимости от требуемой задачи.
- Делать 100% "Java-форт" со всеми ограничениями JVM. Т.е. для каждого слова будет определён фиксированный тип аргументов. Теряем капитально совместимость с классическим Фортом (скажем, слова, типа ?dup будут принципиально невозможны), но приобретаем скорость и "нативный" байткод.
- Делаем весь Форт со всеми словарями одним классом. Практически классическое решение, когда весь словарь лежит в одном кодофайле. Высокая скорость, совместимость с Фортом и... все ограничения одного класса. А их дофига. ЕМНИП, это только 256 локальных переменных, 65536 методов и ограничение на размер в байтах. Также теряется интересная фишка нынешнего JBForth, когда отдельное слово можно переопределять и удалять независимо от всей системы. Точные цифры следует, конечно ещё уточнить. Но ограничения мне не нравятся