目前,TEMJVM 为提示的本地变量发射已检查的代码。这与 clojure.org 中的说法不符,它指出标签不强制执行,而是为了反射消除,而不是 Java 风格的静态类型。
该问题在加载 clojure.core/ns-publics 时呈现出来,它使用了 ^clojure.lang.Namespace 提示的参数,但按照 clojure 的提示行为,期望接受 java.lang.Object 域。
修复方法是采用 Clojure 的 checkcast 风格,即本地变量不会比 Object 更具体地类型提示,也不会提示函数参数。只有互操作站点实际上应该发射检查。
这种行为可能有点愚蠢,但它阻止了 TEMJVM 进行自宿主,所以就这样了。