在JVM上有几种语言/运行时,例如JRuby、Groovy、Jython、Clojure、Rhino、Scala等。 这些语言如何生成Java字节码? 是否有标准化的库来完成这个过程? 生成的字节码如何执行? (或者我的假设是错误的,其中一些提到的语言不会生成字节码吗?)
一些生成字节码,一些有运行时系统作为解释器执行,一些则混合两者。JVM实际上是一个CPU(只是不存在),具有特定的体系结构和一组指令。您可以像为任何CPU生成目标代码一样使用代码生成器来针对它进行操作。虽然它的指令集非常专注于Java的功能和需求,但它仍然足够通用以支持其他模型(勉强)。有多种方法可以生成JVM字节码。您可以手动编写自己的.class文件生成例程(因为格式和指令集well-specified)。您可以使用许多库,例如ASM或BCEL(我认为这是最常见的方法)。或者,您可以将Java代码生成为中间表示,然后使用通常的Java工具进行编译。您可以像执行Java编译代码一样执行代码:Java运行时加载生成的.class文件并开始运行。这也是specification的一部分。