Clojure静态打字

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

抛开静态和动态类型的争论,这是可能的(不是“这是可取的”)?

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

(defn get-length [#*String s] (.length s))
(defn test-get-length [] (get-length 2.0))

#^宏甚至可以重用全局变量( *compile-time-type-checking* )来强制编译器执行检查。

任何想法的可行性?


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


这一定可能。 然而,我不认为Clojure会得到任何形式的弱静态类型 - 它的好处是太少。

然而Rich Hickey曾多次表达他喜欢Qi语言的强大,可选和表达性的打字特征,http://www.lambdassociates.org/qilisp.htm

替代文字


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

这项工作源自Ambrose Bonnaire-Sergeant的本科荣誉论文(PDF),与类型化的球拍系统有关。

链接地址: http://www.djcxy.com/p/33619.html

上一篇: Clojure static typing

下一篇: Good Clojure Code Examples?