Clojure静态打字

Ral*_*lph 23 static-typing clojure

我知道这听起来像是对Lisp爱好者(以及其他动态语言爱好者)的亵渎,但是增强Clojure编译器以支持静态(编译时)类型检查有多难?

抛开支持和反对静态和动态类型的参数,这是否可行(不是"这是可行的")?

我想添加一个新的读取器宏来强制编译时类型(#^宏的增强版本)并将类型信息添加到符号表将允许编译器标记变量被滥用的位置.例如,在下面的代码中,我期望编译时错误(#*是"编译时"类型的宏):

(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))
Run Code Online (Sandbox Code Playgroud)

#^宏甚至可以与全局变量(*compile-time-type-checking*)一起重用,以强制编译器进行检查.

有关可行性的任何想法?

dno*_*len 10

一定可能.但是我认为Clojure不会得到任何形式的弱静态类型 - 它的好处太少了.

丰富的希基几次但是已经表达了他对齐语言的强劲,可选和表现力的打字功能一样,http://www.lambdassociates.org/qilisp.htm

替代文字

  • 谢谢大卫-里奇对此有何参考? (2认同)

Stu*_*rra 7

这当然是可能的.编译器已经在1.3开发分支中对原始参数类型进行了一些静态类型检查.


Kip*_*ros 7

是! 看起来正在进行一个项目core.typed,以使可选的静态类型检查成为现实.请参阅Github项目及其 文档

这项工作源自Ambrose Bonnaire-Sergeant 的本科荣誉学位论文(PDF),与Typed Racket系统有关.