Стековая виртуальная машина, как лучше сделать?

Пишу, компилятор и виртуальную машину. Попробовал написать интерпретатор AST, всё работает, красиво, но медленно.
С преобразованием AST в байт код тоже всё понятно .
Теперь вопрос организации виртуальной машины. Смотрел много разных исходников vm, у всех свой подход.
Выделил 2 варианта.
Как в java:
Есть Frame, внутри отдельно храниться стек, область для локальных переменных (очень удобно)
Этот вариант я описал для себя как простой.

Как в других:
Один стек, с указателями, calling convention.
Этот вариант я описал для себя как сложный.
Для начала думаю сделать самый сложный вариант.

В сложном варианте локальные переменные я кладу в начале стека.
Тут вопрос как мне получать доступ к другой области

int foo = 5;
int bar = 10;
{
int bar = 20;
foo += bar
}
// foo == 25

И какой calling convention лучше всего выбрать чтоб в дальнейшем можно было vm байт-код транслировать в машинный код ?
  • Вопрос задан
  • 419 просмотров
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
Для начала думаю сделать самый сложный вариант.

Делайте сразу регистровую вм, а лучше безрегистровую (раз уж мы говорим про вм).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы