Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
3年前关闭。
Improve this question
是什么将这两种ML方言区分开? SML是一种具有定义和标准的语言。它是稳定的(实际上已经冻结,因此无法进化)。 Objective Caml是由INRIA的一个小组控制的实现。它继续发展。 (IMO的演化得到了很好的管理。) SML有很多实现; Camel 只有一个。 Objective Caml具有许多其他功能,其中最突出的可能是对象和多态变体。 两种语言的记录类型模型截然不同。简而言之,在Caml中,记录字段的名称必须唯一,而在SML中,同一作用域中的两个不同记录类型可能具有相同的字段名称。这个怪癖可能会使从SML到Caml的移植变得有些棘手。 在语法上有很多差异。 库和标准函数有很大的不同。 Caml库非常重要,而SML标准基础库则更具功能性。例如,功能组合是SML中的顶级原语。它不是Caml库的一部分。 Caml字符串库不提供折叠功能(至少从3.08版开始不提供)。许多Caml 类型系统稍有不同:在Caml中,如果 与SML相比, Caml在接口(interface)(称为模块类型或签名)和(具体)实现(称为模块或结构)之间具有更为理智和明智的关系。在SML中,几乎任何事情都会发生,您必须依靠程序员建立良好的约定。在Caml中,良好的约定由编译器建立和执行。 在SML中,算术运算符被重载以应用于浮点数据和整数数据。在Caml中,运算符(operator)不会超载。浮点运算符带有一个额外的点。 在SML中,程序员可以控制中缀运算符的优先级和关联性。在Caml中,这些由运算符(operator)名称的第一个字符确定。此限制限制了能够定义自己的中缀表示法的好处。
有关带有编辑评论的更详细的分析,您还可以查看Adam Chlipala's comparison page。
想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
3年前关闭。
Improve this question
是什么将这两种ML方言区分开?
最佳答案
有很多差异,有些是技术上的,有些是社会政治上的。我试图先将更重要的差异放在首位。
List
函数的实现对于很长的列表都是不安全的。他们炸毁了筹码。 e : ty
类型与ty
类型统一,则在表达式e
上接受类型注释。在SML中,仅当e : ty
类型是ty
类型的实例时,才接受e
。这种区别使Caml中的注释在实践中几乎没有用处,因为不可能使用类型注释来坚持表达式是多态的。 有关带有编辑评论的更详细的分析,您还可以查看Adam Chlipala's comparison page。
关于ocaml - SML和OCaml有什么区别? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/699689/
10-09 03:13