ocaml - SML 和 OCaml 有什么区别?

ocaml - SML 和 OCaml 有什么区别?

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

SML 有很多实现;Caml只有一个。

Objective Caml 有许多额外的特性,其中最突出的可能是对象和多态变体。

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

有很多语法差异。

库和标准函数有很大的不同。Caml 库非常必要,而 SML 标准基础库功能更强大。例如,函数组合是 SML 中的顶级原语;它不是 Caml 库的一部分。Caml 字符串库不提供折叠功能(至少从 3.08 版开始不提供)。许多 CamlList函数的实现对于很长的列表是不安全的;他们炸毁了堆栈。

类型系统略有不同:在 Caml 中,如果类型与 的类型一致,e : ty则接受ty 表达式e上的类型注释。在 SML 中,e : ty仅当类型ty是 的类型的实例时才e被接受。这种区别使 Caml 中的注释在实践中的用处大大降低,因为不可能使用类型注释来坚持表达式是多态的。

与 SML 相比,Caml 在接口(称为模块类型或签名)和(具体)实现(称为模块或结构)之间具有更加理智和合理的关系。在 SML 中,几乎任何事情都会发生,您必须依靠程序员来建立良好的约定。在 Caml 中,良好的约定由编译器建立和执行。

在 SML 中,算术运算符被重载以适用于浮点和整数数据。在 Caml 中,运算符没有重载;浮点运算符用一个额外的点表示。

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

🌟 相关推荐

沧澜实机演示首曝!流派地图大公开,带你深入炎麟舰舱内!
杨紫的星座长相分析图表(杨紫什么星座)
365娱乐头条

杨紫的星座长相分析图表(杨紫什么星座)

📅 08-03 👁️ 5548
自由女神像为啥是绿的?是设计师算错了,百年氧化成移民文化符号