我在某处读到 Clojure 是编译的。它是真正的编译型(如 Java 或 Scala),还是解释型(如 Jython 或 JRuby)?
最佳答案
Clojure 始终编译。
Clojure 编译器生成 Java 字节代码,然后通常由 JVM 将其 JIT 编译为 native 代码。
令人困惑的是 Clojure 的动态和交互特性,这意味着如果您愿意,您可以在运行时调用编译器。这都是 Lisp“代码就是数据”传统的一部分。
例如,以下代码将在运行时调用 Clojure 编译器来编译并执行表单 (+ 1 2)
:
(eval '(+ 1 2))
=> 3
在运行时调用编译器的能力非常有用 - 例如,它使您能够使用 REPL 在正在运行的 Clojure 应用程序中编译和运行新代码。但重要的是不要将这种“交互式”开发风格与“解释型”混淆 - Clojure 开发是交互式的,但仍然始终是编译的。
关于clojure - Clojure 是编译的还是解释的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5669933/