为什么SML和OCaml被认为是ML的方言?ML的定义是什么?

Ins*_*bit 13 ocaml programming-languages sml

ML有很多方言,而SML和OCaml是最受欢迎的方言.SML和OCaml之间存在许多差异,但它们都被视为ML的方言.所以,

  1. 为什么SML和OCaml被认为是ML的方言?
  2. 如何将语言视为ML的方言?
  3. 如果ML不是SML/OCaml,ML的定义是什么?

我猜ML是SML和OCaml的交集,但我找不到一些详细的定义.

mic*_*kig 7

来自camlspotter的链接对ML历史有一个很好的概述,并提到Luca Cardelli称为"Cardelli的ML"的实现.我为此探讨了一下,并发现了这篇论文:Unix下的ML.Luca Cardelli描述了一个"ML"的实现,我很确定这将超过标准ML,因为它的日期是1983年.这是摘要中的特征列表:

  • 互动
  • 强类型
  • 多态类型系统
  • 抽象数据类型
  • 例外
  • 模块

这是一个非常好的列表,虽然有些部分似乎不清楚.我认为这个列表可以作为语言应该具有什么特征的非正式定义,以便被"视为ML",但是有一些值得注意的事情.

系统是"交互式"的要求是一个有点挑剔的实现细节,可能特定于本文所述的实现.标准ML编译器MLton没有交互式REPL(因为它是一个完整的程序优化编译器),但是我怀疑是否有人认真地建议MLton实现的语言不是ML.

此外,"强类型"非常模糊,因此有必要阅读该段的其余内容以获取更多背景信息:

每个ML表达式都有一个静态确定的类型.表达式的类型通常由系统自动推断,无需类型定义.ML类型系统保证任何可以键入的表达式都不会在运行时生成类型错误.静态类型检查在编译时陷阱程序中的大部分错误.

这个列表也没有提到模式匹配,但是本文确实涵盖了模式匹配,尽管我不知道LCF中使用的ur-ML是否具有模式匹配,如果没有,那么如果没有它就会操纵数据类型.我认为,在2013年,一种具有这些功能但缺乏模式匹配的语言将难以作为ML销售.

请注意,如果稍微眯一下,Haskell大多符合此列表.但在实践中它的分歧足以让我认为大多数人认为Haskell受到ML的启发,但"不是ML",主要是因为Haskell 纯粹而懒惰,而ML在历史上一直是不纯洁和严格的.此外,在SML和OCaml中,ML模块系统与Haskell有很大的不同,并且两个ML都没有类型.

这不是对你所有问题的详尽答复,但我希望它有所帮助.