键入功能面向对象语言的系统

时间:2013-05-24 10:08:59

标签: scala types polymorphism ocaml

我想知道现代类型的功能面向对象语言(如Scala和OCaml)如何结合参数多态,子类型和其他功能。

它们是基于System F<:,还是更强大或更弱?

是否有一个经过充分研究的正式类型系统,如Haskell的System FC,它可以作为这些语言的“核心”?

1 个答案:

答案 0 :(得分:14)

OCaml的

OCaml类型理论的“核心”包括System F的扩展, 但模块系统对应于F &lt;:的混合 (模块可以通过子类型强制转换为更严格的签名)和 Fω。

在核心语言中(不考虑在 模块级别),子类型在OCaml中非常受限制,作为子类型 关系不能被抽象(没有 有限量化)。语言强调多态性 相反,参数化,特别是甚至“可扩展”类型 支持在其核心使用行多态(具有便利层) 在封闭的类型之间进行子类型化。)

有关OCaml的类型理论演示的介绍,请参阅Didier Remy的在线书籍Using, Understanding, and Unraveling the OCaml Language (From Practice to Theory and vice versa) 。它的further reading章将为您提供更多参考,特别是关于面向对象的处理。

关于模块系统部分的形式化已经做了很多工作;可以说,ML模块系统不能自然地拟合Fω或F &lt;: ω作为核心形式(一次,类型参数< em>在模块系统中命名,而不是像lambda-calculi那样按位置传递)。函授的最佳解释之一是F-ing modules,由Andreas Rossberg,Claudio Russo和Derek Dreyer于2010年首次发表。

Jacques Garrigue还对语言的更高级功能做了大量工作(不能概括为“只是系统F的语法糖”),即多态变体(等递归结构类型),标记参数,和GADTs)。可以找到这些方面的各种描述on his webpage,包括多态变体的机械化证明(在Coq中)和宽松的值限制。

您还应该查看网页A few papers on Caml,该网页指向围绕OCaml语言的一些研究文章。

Scala的

Scala的类似页面是this one。与您的问题特别相关的是: