【问题标题】:Type systems of functional object-oriented languages函数式面向对象语言的类型系统
【发布时间】:2013-05-19 21:50:50
【问题描述】:

我想知道现代类型化函数式面向对象语言(例如 Scala 和 OCaml)究竟是如何结合参数多态性、子类型化和其他特性的。

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

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

【问题讨论】:

  • 对于 scala,我知道该语言有一个正式的系统,我不记得它是否是 vObj。我仍然从 A.Moors here 找到了一篇有用的论文,但我不知道它的日期
  • 仅供参考:论文发表于 FOOL'08
  • 另见有关 Scala 依赖对象类型的论文:lampwww.epfl.ch/~amin/dot/fool.pdf

标签: scala types polymorphism ocaml


【解决方案1】:

OCaml

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

在核心语言中(不考虑在 模块级别),子类型在 OCaml 中非常受限制,因为子类型 关系不能被抽象出来(没有 有界量化)。语言强调多态 取而代之的是参数化,尤其是“可扩展”类型 支持在其核心使用行多态性(带有便利层 在封闭的此类类型之间进行子类型化)。

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

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

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

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

斯卡拉

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

【讨论】:

  • 很好的答案,谢谢!不过,我会把这个问题留待更多时间。
  • EPFL 也在持续努力将 Scala 的基础正式化。在github.com/namin/dot阅读更多内容。
  • 感谢@EugeneBurmako 的参考,这确实是个有趣的工作!
猜你喜欢
  • 2011-06-09
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多