我知道这可能听起来是对Lisp追随者(和其他喜欢动态语言的人)的亵渎,但增强Clojure编译器以支持静态(编译时)类型检查有多困难?
撇开静态和动态类型的争论,这是否可行(不是“是否可取”)?
我在想,添加一个新的读取宏来强制进行编译时类型(#^宏的增强版本),并将类型信息添加到符号表中,将允许编译器标记变量错误使用的地方。例如,在下面的代码中,我希望出现编译时错误(#* 是“编译时”类型宏):
(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))
#^ 宏甚至可以与全局变量(*compile-time-type-checking*
)一起重用,以强制编译器进行检查。
对可行性有何想法?