Я написал реализацию Brainfuck (С++), которая работает следующим образом:
- Прочитать входной файл brainfuck
- Выполняют тривиальные оптимизации
- Преобразуйте мозговой код в машинный код для VM
- Выполнить этот машинный код в VM
Это довольно быстро, но узкое место теперь находится на виртуальной машине. Он написан на С++ и читает токен, выполняет действие (которого не так много, если вы знаете Brainfuck) и т.д.
То, что я хочу сделать, - это разграничить виртуальную машину и сгенерировать собственный машинный код на лету (так, в основном, JIT-компилятор). Это может быть легко ускорено в 20 раз.
Это означало бы, что шаг 3 заменяется компилятором JIT и шагом 4 с выполнением сгенерированного машинного кода.
Я не знаю, с чего начать, поэтому у меня есть несколько вопросов:
- Как это работает, как выполняется сгенерированный машинный код?
- Существуют ли библиотеки С++ для генерации собственного машинного кода?