基于JVM的语言/运行时如何生成Java字节码?

JVM上有几种语言/运行时:例如 JRubyGroovyJythonClojureRhinoScala 等等......

  • 这些 generate Java字节码怎么办?

  • 这样做有标准化的 libraries 吗?

  • 生成的字节码如何获得 executed

(或者我的假设是错误的,并且一些提到的语言会生成 not 生成字节码?)

回答(1)

3 years ago

其中一些生成字节码 . 有些具有作为解释器执行的运行时系统 . 有些人混合了两者 . 毕竟,JVM是一个具有特定架构和一组指令的CPU(恰好不存在) . 您使用代码生成器来定位它的方式与为任何CPU生成目标代码的方式相同 . (现在公平地说它的指令集非常注重Java的功能和需求,但它仍然足以支持其他模型 . 几乎没有 . )

有多种方法可以生成JVM字节码 . 您可以处理自己的.class文件生成例程(因为格式和指令集是well-specified) . 您可以使用许多库,如ASMBCEL(我认为这是最常用的方法) . 或者您可以生成Java代码作为您的中间表示,然后使用通常的Java工具进行编译 .

您执行代码的方式与执行Java编译代码的方式相同:Java运行时加载生成的.class文件并开始运行 . 这也是specification的所有部分 .