По выбору стоит использовать что-то минимальное и расширить его. mini-vm содержит менее 200 строк кода, включая комментарии, имеет либеральную лицензию (MIT), написан на C. Из коробки он поддерживает 0 операций, но его очень легко расширить.Приведенный пример компилятора представляет собой простой калькулятор.Но можно легко представить добавление сравнений, ветвлений, доступа к памяти и обращений супервизора, чтобы вы могли перейти туда, куда хотите.Виртуальная виртуальная машина, которую легко расширить, особенно полезна для разработки языков, специфичных для предметной области, и иметь несколько языков, нацеленных на ваш вид мини-vm, было бы просто, если бы не пришлось реализовывать несколько компиляторов (или портировать их. Компилятор QuakeC просто lcc,и очень легко перенастраивать).
Поддержка потоков должна была бы быть расширением, и базовая виртуальная машина не будет хорошо работать в многопроцессорном сценарии pthread (тяжелая многопоточность).Странно, но mini-vm может иметь ПК (программный счетчик) для каждого тяжеловесного потока, но разделяет регистры между всеми потоками, использующими один и тот же контекст.Выполнение отдельных контекстов было бы поточно-ориентированным.
Я пропускаю ответы на требования к языку, потому что вопрос начинается с запроса базовой машины.Но в то же время требует C / Java-подобного синтаксиса, не зная, как разрешить этот конфликт, кроме как констатировать этот конфликт.