【发布时间】:2018-08-30 15:37:16
【问题描述】:
浏览 Clojure 源代码时,我发现了一个 Intrinsics.java 文件。看起来它是一些 clojure 运行时函数到 JVM 操作码的映射。
但是,我不确定它们在哪里应用。以下代码
(def ^:const pi 3.141592)
(defn circumference [^double r] (* r 2.0 pi))
编译成
public static java.lang.Object invokeStatic(double r);
0 dload_0 [r]
1 ldc2_w <Double 2.0> [14]
4 dmul
5 ldc2_w <Double 3.141592> [16]
8 invokestatic clojure.lang.Numbers.multiply(double, double) : double [23]
11 invokestatic java.lang.Double.valueOf(double) : java.lang.Double [29]
14 areturn
我看到clojure.lang.Numbers.multiply(double, double) : double 没有被替换为DMUL。
内在函数究竟是如何使用的?谢谢。
【问题讨论】:
-
对于 Clojure 电子邮件列表,这可能是一个更好的问题:groups.google.com/forum/#!forum/clojure
标签: clojure compiler-construction clojure-java-interop