Как языки/среды выполнения, основанные на JVM, генерируют байт-код Java?

На JVM существует несколько языков /runtimes: JRuby, Groovy, Jython, Clojure, Rhino, Scala и т.д.

  • Как эти сгенерировать Java-байт-код?
  • Существуют ли стандартизированные библиотеки для этого?
  • Как сгенерированный байт-код получает выполненный?

(Или мое предположение неверно, и некоторые из упомянутых языков не генерируют байт-код?)

1 ответ

Некоторые из них генерируют байт-код. У некоторых есть среда выполнения, которая выполняется как интерпретатор. У некоторых есть смесь двух. JVM - это, в конце концов, процессор (который просто не существует) с определенной архитектурой и определенным набором инструкций. Вы нацеливаете его на генератор кода так же, как вы создаете объектный код для любого процессора. (Теперь, честно говоря, его набор инструкций очень сильно ориентирован на возможности и потребности Java, но он все же достаточно общий для поддержки других моделей.).

Существует множество способов генерации байт-кода JVM. Вы можете использовать свои собственные процедуры генерации файлов .class(так как формат и набор инструкций ASM или BCEL (это самый распространенный подход, я думаю). Или вы можете генерировать Java-код в качестве промежуточного представления, а затем компилировать его с помощью обычных инструментов Java.

Вы выполняете код так же, как вы выполняете Java-скомпилированный код: среда выполнения Java загружает созданные .class файлы и запускается. Это также часть .

licensed under cc by-sa 3.0 with attribution.