我知道这听起来像Lisp爱好者(和其他动态语言爱好者)的亵渎,但是增强Clojure编译器以支持静态(编译时)类型检查有多困难?
除了支持静态和动态类型的参数外,这是否可能(不是“建议这样做”)吗?
我在想,添加一个新的读取器宏以强制执行编译时类型(#^宏的增强版本),并将类型信息添加至符号表,将允许编译器标记变量被滥用的位置。例如,在下面的代码中,我期望编译时错误(#*是“compile-time”类型的宏):
(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))
#^宏甚至可以与全局变量(
*compile-time-type-checking*
)重用,以强制编译器执行检查。
对可行性有何想法?
请您参考如下方法:
当然有可能。编译器已经在1.3开发分支中对原始参数类型进行了一些静态类型检查。