我知道这对 Lisp 爱好者(以及其他动态语言爱好者)来说可能听起来像是对它的亵渎,但是增强 Clojure 编译器以支持静态(编译时)类型检查有多难?
撇开支持和反对静态和动态类型的论点,这可能吗(不是“这是可取的”)?
我在想,添加一个新的读取器宏来强制编译时类型(#^ 宏的增强版本)并将类型信息添加到符号表将允许编译器标记变量被滥用的位置。例如,在以下代码中,我预计会出现编译时错误(#* 是“编译时”类型的宏):
(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))
#^ 宏甚至可以与全局变量 ( *compile-time-type-checking*
) 一起使用,以强制编译器进行检查。
对可行性有任何想法吗?