将OCaml转换为F#:键入和类型推断之间的差异

Guy*_*der 8 f# ocaml type-inference typing

在研究F#和OCaml之间的类型推断差异时,我发现他们倾向于关注主格结构 类型系统.然后我发现了函数式编程语言的独特特征,它将打字和类型推断列为不同的特征.

由于特质文章说OCaml和F#都使用Damas-Milner类型推断,我认为这是一种标准算法,即一种不允许变化的算法,这两个特征如何相关?难道Damas-Milner是构建两个类型推理系统的基础,但是他们每个都根据打字修改Damas-Milner?

我还检查了F#源代码中的Damas,Milner和Hindley这两个词,但没有找到.搜索单词推断会调出类型推断的代码.

如果是这样,是否有任何论文讨论特定语言的每种类型推断算法的细节,或者我必须查看OCamlF#的源代码.

编辑

这是一个页面,突出显示与OCaml和F#之间的类型推断相关的一些差异.

t0y*_*yv0 6

关于你的DM问题,你是对的.对于F#和OCaml,DM算法只是一种模式.类型检查器已扩展为支持自定义功能.在OCaml中,这些功能包括具有行类型,多变量,一流模块的对象.在F#中 - .NET类型系统互操作(类,接口,结构,子类型,方法重载),度量单位.我认为F#类型推断也是以从左到右的方式倾斜,以允许更有效的交互式检查,因此一些代码令人惊讶地需要注释.

就类型检查和推理而言,OCaml比F#更具表现力和直观性.SML会比它们中的任何一个更接近vanilla HM,但SML也有一些扩展用于某些运算符多态和记录支持.

  • +1,但我不认为差异是从左到右,而是名义与结构. (2认同)

Jon*_*rop 2

由于特征文章说 OCaml 和 F# 都使用 Damas-Milner 类型推断,我认为这是一种标准算法,即不允许变化的算法,那么这两个特征有何关系?

Damas-Milner 算法(也称为算法 W)可以扩展,事实上,它的所有实际相关的实现都添加了许多扩展,包括 OCaml 和 F#。

是否 Damas-Milner 是构建这两种类型推理系统的基础,但它们各自根据类型来修改 Damas-Milner?

没错,是的。特别是,OCaml 对 Damas-Milner 核心有很多不同的实验性扩展,包括多态变体、对象、一流模块。F# 更简单,但也有一些 OCaml 没有的扩展,最显着的是重载(主要是运算符)。

我不相信有总结论文描述 OCaml 或 F# 的整个类型系统。事实上,我不知道有一篇论文描述了当今的 F# 类型系统。对于 OCaml,您有许多不同的论文,每个论文涵盖不同的方面。我将从雅克·加里格(Jacques Garrigue)自己的出版物开始,然后遵循其中的参考文献。