Clojure中的类型安全性

| 我想问一下Clojure上有什么样的类型安全语言构造? 我已经读过几次Luke VanderHart和Stuart Sierra的“ Practical Clojure”,但是我仍然给人一种明显的印象,即Clojure(像其他lisps)并不十分重视编译时验证检查。类型安全只是用于正确语义编译时检查的一种(非常流行的)策略 我问这个问题是因为我很想证明自己错了。 clojure上有哪些设计模式可用来(在编译时而不是在运行时)验证期望字符串的函数不会被整数列表调用? 另外,我读过像Paul Graham这样的非常聪明的人,公开倡导Lisp允许在其之上实施低级语言的所有功能(大多数人会说,语言本身也在其之上重新实现),所以如果断言是正确的,那么诸如类型检查之类的琐碎事情应该轻而易举。因此,您是否觉得clojure或其他lisps中存在类型系统(或实现此类类型系统的能力),从而使程序员能够将验证检查从运行时偏移到编译时,甚至更好,所以可以设计-时间?     
已邀请:
        Clojure中的编译单元非常小-一个功能。 Lispers在开发过程中往往会更改正在运行的程序的一小部分。在这种开发风格中引入静态类型检查是有问题的-对于更深入的讨论,为什么我建议Gilad Bracha发表“类型是反模块的”一文。因此,Clojure倾向于使用Lisp高度面向REPL的开发更好地适应前/后条件。 也就是说,为Clojure构建点菜式系统当然是合乎需要的。齐/申和Typed Racket夺走了这条足迹。此功能可以很容易地作为库提供。我希望将来使用core.logic-https://github.com/clojure/core.logic构建类似的东西。     
        由于Clojure是一种动态语言,所以整个想法是不要在编译时检查类型(或任何事物)。 即使在函数中添加类型提示,也不会在编译时进行检查。 由于Clojure是Lisp,因此您可以在编译时使用宏执行任何您想做的事情,并且宏功能强大到可以编写自己的类型系统。有些人已经为lisps Typed Racket和Qi建立了字体系统。这些Type系统可以与任何使用“标准”语言的Type系统一样强大。 好的,我们现在知道有可能,但是Clojure是否具有这样的可选类型系统?当前的答案是否定的,但是有一个逻辑引擎(core.logic)可用于实现类型系统,但作者尚未朝那个方向工作。     
        有一个库向Clojure添加了可选的类型系统, http://typedclojure.org/   基本原理      静态类型具有众所周知的好处。例如,静态类型的语言在可能的最早时间会遇到许多常见的编程错误:编译时。类型还可以作为一种很好的形式(可机器检查的)文档,几乎总是增加现有的手写文档。      没有静态类型检查(动态类型)的语言会带来其他好处。没有强制性静态类型的严格严格性,它们可以提供更灵活,更宽容的惯用语,有助于快速进行原型制作。随着程序的增长,通常需要使用静态类型检查的好处。      这项工作为动态类型化的语言Clojure添加了静态类型检查(及其一些好处),同时仍保留了表征该语言的惯用语。它允许混合静态和动态类型的代码,以便程序员可以使用更合适的代码。     

要回复问题请先登录注册