Clojure有一些有趣的特性来表示类型,包括但不限于deftype
, defprotocol
, reify
和extend
。
Typed Racket中的类型特性与Clojure中的类似特性之间有哪些相似之处和差异?
Clojure有一些有趣的特性来表示类型,包括但不限于deftype
, defprotocol
, reify
和extend
。
Typed Racket中的类型特性与Clojure中的类似特性之间有哪些相似之处和差异?
deftype
和 defprotocol
在Clojure中定义动态行为。在Racket中,我们会使用struct
或struct-property
来做类似的事情,尽管Racket中没有像defprotocol
那样的东西。
编辑: Racket现在有了generics,它们类似于Clojure的协议。
reify
和 extend
,我认为对应于在Racket中使用make-struct-type
创建新的动态结构类型。
Typed Racket和所有这些特性之间的主要区别在于,Typed Racket在尝试运行程序之前进行静态检查。在Typed Racket程序中,您永远不能应用错误的访问器或将数字用作函数。您甚至无法运行可能存在此类错误的程序。
目前,与 Typed Racket 最相似的 Clojure 特性是它用于性能的注释。
编辑: 现在有了Ambrose Bonnaire-Sergeant的Typed Clojure,它受到 Typed Racket 的启发并基于其构建。