首页 文章

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

提问于
浏览
12

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

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

  • 如何将语言视为ML的方言?

  • 如果ML不是SML / OCaml,ML的定义是什么?

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

1 回答

  • 7

    来自camlspotter的链接对ML历史有一个很好的概述,并提到Luca Cardelli的实现名为"Cardelli's ML" . 我捅了一下,发现了这篇论文:ML under Unix . Luca Cardelli描述了"ML"的实现,以及1983年的I2656174_ . 这是摘要中的特征列表:

    • 互动

    • 强类型

    • 多态类型系统

    • 抽象数据类型

    • 例外

    • 个模块

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

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

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

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

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

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

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

相关问题