Ins*_*bit 13 ocaml programming-languages sml
ML有很多方言,而SML和OCaml是最受欢迎的方言.SML和OCaml之间存在许多差异,但它们都被视为ML的方言.所以,
我猜ML是SML和OCaml的交集,但我找不到一些详细的定义.
来自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都没有类型.
这不是对你所有问题的详尽答复,但我希望它有所帮助.