【发布时间】:2011-04-18 16:50:34
【问题描述】:
在尝试优化 C 和 LISP 时,查看编译器输出的汇编代码会很有帮助。
Clojure 可能会编译成同样有用的 JVM 字节码。
我怎么看?
【问题讨论】:
-
请注意,优化字节码实际上可能不会产生任何积极的结果。见this interview。它谈到了编写Java,但它基本上适用于所有产生字节码的语言。
在尝试优化 C 和 LISP 时,查看编译器输出的汇编代码会很有帮助。
Clojure 可能会编译成同样有用的 JVM 字节码。
我怎么看?
【问题讨论】:
Clojure 在运行时将所有 Clojure 代码动态编译为字节码。我不知道你怎么能看到这个动态编译的字节码。但是,您可以自己提前 (AOT) 编译 Clojure 代码,这将生成 .class 文件。然后就可以使用javap查看字节码了。
使用 Clojure/core 中的 compile 函数来编译你的命名空间:
编译 功能
用法:(编译库)
将符号 lib 命名的命名空间编译成一组 类文件。库的来源必须在适当的 类路径相对目录。输出文件将进入 compile-path 指定的目录,该目录也必须 在类路径中。
然后使用javap:
javap -l -c -s -private MyClass
【讨论】:
我为此制作了一个小型库和 lein-plugin,请查看:
https://groups.google.com/d/msg/clojure/_BBXpt_GPIw/WWq2VbWkEKEJ
https://github.com/gtrak/no.disassemble
它具有不需要 AOT 的额外优势。
【讨论】:
一些手工解决方案:
【讨论】: