lur*_*her 18 static-analysis compiler-errors clojure type-safety compilation-time
我想问一下Clojure上有哪种类型的安全语言?
我现在已经多次读过Luke VanderHart和Stuart Sierra的'Practical Clojure',但我仍然有一个明显的印象,即Clojure(和其他lisps一样)不会非常认真地对编译时验证进行检查.类型安全只是一种(非常流行的)策略,用于对正确的语义进行编译时检查
我问这个问题,因为我很难被证明是错的; 什么样的设计模式可用于clojure(在编译时,而不是在运行时)验证期望字符串的函数不会被调用,例如,整数列表?
此外,我读过非常聪明的人,比如Paul Graham公开提倡lisp允许在它之上实现低级语言的所有内容(大多数人会说语言本身正在重新实现),所以如果那个断言这将是真的,然后像类型检查这样简单的东西应该是小菜一碟.所以你觉得在clojure或其他lisps中存在类型系统(或实现这种类型系统的能力),这使得程序员能够将验证检查从运行时间偏移到编译时,甚至更好,设计 - 时间?
dno*_*len 21
Clojure中的编译单元非常小 - 只需一个功能.Lispers倾向于在开发时改变运行程序的一小部分.将静态类型检查引入这种开发方式是有问题的 - 为了更深入地讨论为什么我推荐Gilad Bracha的帖子类型是Anti-Modular.因此,Clojure更喜欢使用Lisp高度REPL导向开发的前/后条件.
也就是说,为Clojure建立一个单点式系统当然是可取的和可能的.Qi/Shen和Typed Racket已经开辟了这条线索.此功能可以作为库轻松提供.我希望将来使用core.logic构建类似的东西 - https://github.com/clojure/core.logic.
由于 Clojure 是一种动态语言,因此整个想法不是在编译时检查类型(或大部分内容)。
即使您向函数添加类型提示,它们也不会在编译时进行检查。
由于 Clojure 是一个 Lisp,你可以在编译时使用宏做任何你想做的事情,并且宏足够强大,你可以编写自己的类型系统。有些人为 lisps Typed Racket和Qi制作了类型系统。这些类型系统可以与“普通”语言中的任何类型系统一样强大。
好吧,我们现在知道这是可能的,但是 Clojure 有这样一个可选的类型系统吗?目前答案是否定的,但是有一个逻辑引擎(core.logic)可以用来实现类型系统,但作者还没有朝这个方向努力。
| 归档时间: |
|
| 查看次数: |
2590 次 |
| 最近记录: |