Язык не сидит на виртуальной машине, для которой он предназначен
Я хочу узнать, как спроектировать виртуальную машину, которая может поддерживать несколько языков и работать с их многочисленными обновлениями без снижения производительности. Например, Scala может напрямую взаимодействовать со старыми библиотеками Java.
1 ответ
Вы смотрите на это неправильно. JVM в основном действует как процессор, выполняя набор инструкций байт-кода. Если вы разрабатываете компилятор, который генерирует действительный байт-код JVM, то JVM может их запустить.
Это то, что компилятор Java (javac
) делает - генерирует байт-код из источников Java, которые могут работать на JVM. Это также то, что компилятор Scala (scalac
) делает - генерирует байт-код из исходников Scala, которые могут работать на JVM. Это также то, что Groovy компилятор (groovyc
) делает - генерирует байт-код из Groovy-источников, которые могут работать на JVM.