首页 文章

SML和OCaml有什么区别? [关闭]

提问于
浏览
93

是什么让两个ML方言分开?

3 回答

  • -4

    存在许多差异,一些是技术性的,一些是社会政治的 . 我试图首先提出更重要的差异 .

    • SML是一种具有定义和标准的语言 . 它是稳定的(实际上已被冻结,因此无法进化) . 目标Caml是由INRIA的一个小组控制的实现 . 它继续发展 . (国际海事组织的演变管理得很好 . )

    • SML有很多实现; Caml只有一个 .

    • 目标Caml有许多其他功能,其中最突出的可能是对象和多态变体 .

    • 这两种语言具有截然不同的记录类型模型 . 简而言之,在Caml中,记录字段的名称必须是唯一的,其中在SML中,同一范围中的两个不同记录类型可以具有共同的字段名称 . 这个怪癖可以使从SML移植到Caml有点棘手 .

    • 有很多语法上的差异 .

    • 库和标准函数截然不同 . Caml库非常重要,而SML标准库则功能更强大 . 例如,函数组合是SML中的顶级基元;它's not part of the Caml library. The Caml string library doesn' t提供折叠功能(至少不是版本3.08) . 许多Caml List 函数的实现对于很长的列表是不安全的;他们吹了堆栈 .

    • 类型系统略有不同:在Caml中,如果类型 tye 类型统一,则接受表达式 e : ty 上的类型注释 . 在SML中,仅当类型 tye 类型的实例时才接受 e : ty . 这种区别使Caml中的注释在实践中变得不那么有用,因为不可能使用类型注释来坚持表达式是多态的 .

    • Caml在接口(称为模块类型或签名)和(具体)实现(称为模块或结构)之间的关系比SML更加明智和明智 . 在SML中,几乎任何事情都有,你必须依靠程序员来 Build 良好的约定 . 在Caml中,编译器 Build 并实施了良好的约定 .

    • 在SML中,算术运算符被重载以应用于浮点数和整数数据 . 在Caml中,操作员不会超载;浮点运算符标有额外的点 .

    • 在SML中,程序员可以控制中缀运算符的优先级和关联性 . 在Caml中,这些由运营商名称的第一个字符决定 . 此限制限制了能够定义自己的中缀表示法的好处 .

    有关编辑评论的更详细分析,您还可以查看Adam Chlipala's comparison page .

  • 150

    有关Norman Ramsey提到的语法差异的详细信息,请参阅以下几个网页:

  • 29

    OCaml添加了面向对象的功能,并且有一些小的语法差异 .

相关问题