Typed Racket 中的打字功能与 Clojure 中的类类型功能有何异同?

Posted

技术标签:

【中文标题】Typed Racket 中的打字功能与 Clojure 中的类类型功能有何异同?【英文标题】:What are the similarities and differences between the typing features in Typed Racket and the type-like features in Clojure? 【发布时间】:2012-03-22 04:24:17 【问题描述】:

Clojure 有一些用于表示类型的有趣特性,包括但不限于 deftypedefprotocolreifyextend

【问题讨论】:

【参考方案1】:

deftypedefprotocol 在 Clojure 中定义动态行为。在 Racket 中,我们会使用 structstruct-property 来做类似的事情,尽管在 Racket 中没有像 defprotocol 这样的东西。

编辑: Racket 现在有generics,类似于 Clojure 协议。

reifyextend,我认为,对应于在 Racket 中使用make-struct-type,它会动态创建新的结构类型。

Typed Racket 与所有这些功能的最大区别在于,Typed Racket 在尝试运行之前静态地检查您的程序。您永远不能在 Typed Racket 程序中应用错误的访问器,或者将数字用作函数。您甚至无法运行可能会出现此类错误的程序。

目前,Clojure 最像 Typed Racket 的特性是它用于性能的注解。

编辑:现在有 Ambrose Bonnaire-Sergeant 的 Typed Clojure,它的灵感来自 Typed Racket。

【讨论】:

以上是关于Typed Racket 中的打字功能与 Clojure 中的类类型功能有何异同?的主要内容,如果未能解决你的问题,请参考以下文章

Typed Racket convert Any to All(a)

在 Racket 中将 Exact-Rational 转换为 Integer

Racket 与 Scheme 宏

Racket 博士有自动完成功能吗?

通用类型(T)与打字稿中的任何类型有啥区别

前端实用工具链接