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