【发布时间】:2014-03-05 17:06:34
【问题描述】:
Clojure 编译器(它只是一个 jar/java 应用程序)使用什么库/api 来生成 JVM 字节码?我很好奇,因为字节码是在运行时由 java 而不是 javac 生成的,所以它是一个输出 jvm 字节码的 java 程序。
【问题讨论】:
标签: java compiler-construction clojure compilation
Clojure 编译器(它只是一个 jar/java 应用程序)使用什么库/api 来生成 JVM 字节码?我很好奇,因为字节码是在运行时由 java 而不是 javac 生成的,所以它是一个输出 jvm 字节码的 java 程序。
【问题讨论】:
标签: java compiler-construction clojure compilation
Clojure 使用名为 ASM 的 Java 库来生成字节码。部分 lib 的 fork 被嵌入到 clojure 项目中:https://github.com/clojure/clojure/tree/master/src/jvm/clojure/asm
【讨论】:
Clojure 编译器如何生成 JVM 字节码?
这只是 Java 编程(除非他们将代码生成器引导到 Clojure ......这似乎不太可能)。作为一个粗略的简化1,打开一个文件,按照JVM规范指定的“classfile”格式写出代码,然后关闭文件。 (或将代码写入 ByteArrayOutputStream 或等效项。)
郑重声明,Clojure 编译器所做的工作与 Java 编译器在运行时调用时可以做的工作并没有本质上的区别。但显然,由于语言的不同,以及各个开发人员的不同想法和优先级,细粒度的细节会有所不同。
1 - 如果您想了解代码生成器的一般工作原理,请阅读有关编译器编写的教科书。有关 Clojure 是如何做到这一点的所有血腥细节,请查看源代码...
【讨论】: