我读过Clojure编译的地方。像Java或Scala一样,它是否真的被编译,而不是像Jython或JRuby一样被解释?Clojure是编译还是解释?
回答
Clojure是总是编译。
Clojure编译器生成Java字节码,通常由JVM JIT编译为本地代码。
可以混淆的是Clojure的动态和交互性,这意味着如果你愿意,可以在运行时调用编译器。这是Lisp“代码是数据”传统的一部分。
例如,下面将调用在运行时Clojure的编译器来编译和执行的形式(+ 1 2)
:
(eval '(+ 1 2))
=> 3
调用在运行时编译的能力是非常有用的 - 例如,它使您能够使用REPL在正在运行的Clojure应用程序中编译和运行新代码。但重要的是不要混淆这种“互动式”发展风格与“解读”--Clojure开发是互动式的,但仍然是经常编译的。
双方! (当涉及到生成字节码)
Clojure是上最飞越时compiled at code load time到JVM字节码,其具有感和解释语言的流,及ahead-of-time compiled到JVM字节码,其具有流的编译语言。 这两个都是由Java Hotspot编译器将JIT编译为机器代码,后者负责Clojure的速度依赖的动态优化。只是为了使事情变得有趣“加载/评估”代码可以在运行时即时编译,并且AOT编译代码可以在运行时加载和评估源代码。
- 如果你想“解释”,那么你可以从0123的
(load "/my/file.clj")
从repl。 - 如果你想要提前编译,我可以建议使用leiningen clojure项目管理工具。
在当我提到编译与解释我应该清楚,我说的是打开源代码转换成JVM字节码这种情况。所有的JVM语言都是compiled by the JVM at runtime,所以区别并不是很有趣。
两个!是错误的,它只有一种解释型语言的流程,没有任何解释。 – nickik 2011-04-14 21:41:52
我们正在陷入纯粹的定义和明确的简洁答案之间的争论。在最后一段。我正在讨论创建JVM字节码的过程。 – 2011-04-14 21:49:48
编辑,使之更清晰,谢谢kickik – 2011-04-14 22:08:00
Clojure是一种编译的JVM语言。这意味着当遇到新程序时,第一步就是将其编译为JVM字节码。
如果您使用的是OpenJDK或其衍生产品,某些JVM字节码稍后可能会通过HotSpot编译为机器代码。
作为一种高级语言,Clojure具有动态类型的形式,这就是“完全动态”的短语所指的。
- 1. Java - 解释还是编译?
- 2. 是javascript解释还是jit编译
- 3. ETL是解释还是编译语言
- 4. .NET VM是编译器还是解释器?
- 5. 是解释还是编译的DBMS(MySQL,SQL Server ...)?
- 6. php是编译语言还是解释语言?
- 7. 编译vs解释:允许还是不允许
- 8. CUDA使用解释器还是编译器?
- 9. 解释器是否编译python脚本?
- 10. Scala有一个解释器给Scala项目执行它们的选项是编译还是解释?
- 11. 编译器vs解释器,还是用解释型语言编写编译器仍然使它成为编译器?
- 12. JAVA:解释器还是编译器? Java的文件扩展名?如何执行?
- 13. Clojure开发:IDE还是REPL?
- 14. clojure程序/编译器/解释器如何实际“工作”?
- 15. G729编解码器是32kbps还是8kbps?
- 16. 是我的PHP解释器发疯了,还是我是谁?
- 17. Clojure编译
- 18. 编译Clojure?
- 19. 飞镖编译器疯了,还是我?
- 20. LLVM编译优化bug还是什么?
- 21. 我应该用/ MD还是/ MT编译?
- 22. 编译解释语言
- 23. python编译器包解释
- 24. 从解释到编译heist
- 25. QMetaObject编译器解释?
- 26. Java编译器/解释器
- 27. 脚本解析后还是立即编译?
- 28. 什么是Perl 5的可用编译器/解释器?
- 29. 解释器或编译器中的单元格是什么?
- 30. Python是否使用编译器或解释器或组合?
JFGI。看看项目主页。 – Marcin 2011-04-14 21:30:43
@Marcin我做了,但它让我困惑了一下。你能否与donwvote一起提供一个aswer? – OscarRyz 2011-04-14 21:32:00
“Clojure是一种编译语言 - 它直接编译为JVM字节码,但仍保持完全动态。”够清楚了吗? – Marcin 2011-04-14 21:33:56