ML有很多方言,而SML和OCaml是最受欢迎的方言。 SML和OCaml之间存在许多差异,但它们都被视为ML的方言。 所以,
我猜ML是SML和OCaml的交集,但我找不到一些详细的定义。
答案 0 :(得分:7)
来自camlspotter的链接对ML历史有一个很好的概述,并提到了Luca Cardelli称为“Cardelli的ML”的实现。我为此探讨了一下,发现了这篇论文:ML under Unix。 Luca Cardelli描述了一个“ML”的实现,我很确定这将早于1983年的标准ML。这是摘要中的特征列表:
这是一个相当不错的清单,尽管有些部分似乎不清楚。我认为这个列表可以作为语言应该具有什么特征的非正式定义,以便被“视为一个ML”,但是有一些值得注意的事情。
系统是“交互式”的要求是一个有点挑剔的实现细节,可能特定于本文所述的实现。标准ML编译器MLton没有交互式REPL(因为它是一个完整的程序优化编译器),但我怀疑是否有人认真地建议MLton实现的语言不是ML。
此外,“强类型”非常模糊,因此有必要阅读该段的其余部分以获取更多背景信息:
每个ML表达式都有一个确定的类型 静态。表达式的类型通常由系统自动推断, 不需要类型定义。 ML类型系统保证任何表达式 可以键入不会在运行时生成类型错误。静态类型检查在编译时陷阱程序中的大部分错误。
这个列表也没有提到模式匹配,然而本文确实涵盖了模式匹配,虽然我不知道LCF中使用的ur-ML是否有模式匹配,如果不,如果没有它,人们将如何操纵数据类型。我认为,在2013年,一种具有这些功能,但缺乏模式匹配的语言,很难作为ML销售。
请注意,如果稍微眯一下,Haskell大多符合此列表。但实际上它的分歧很多,我认为大多数人都认为Haskell受到ML的启发,但“不是ML”,主要是因为Haskell是纯和 lazy ,而ML历来是不纯和严格。此外,在SML和OCaml中,ML模块系统与Haskell有很大不同,并且两个ML都没有类型类。
这不是对你所有问题的详尽答复,但我希望它有所帮助。