我的理解是,“纯 OCaml”是指 OCaml 中标准的所有内容,包括其非“纯”功能特性,而“纯功能”是指通常的属性:没有副作用、没有异常处理等。从这个意义上说,“纯 OCaml” 实现与使用 C 或 C++ 实现的 OCaml 相对。
然而,我最近与一个非常坚持“纯 OCaml”在某些圈子中意味着 OCaml 的“纯功能子集”的人就这个问题进行了辩论。
这两个含义真的在社区中使用吗?是否存在这样的歧义?是否有一些备受推崇的来源在第二种意义上使用“Pure OCaml”的指针?
我的理解是,“纯 OCaml”是指 OCaml 中标准的所有内容,包括其非“纯”功能特性,而“纯功能”是指通常的属性:没有副作用、没有异常处理等。从这个意义上说,“纯 OCaml” 实现与使用 C 或 C++ 实现的 OCaml 相对。
然而,我最近与一个非常坚持“纯 OCaml”在某些圈子中意味着 OCaml 的“纯功能子集”的人就这个问题进行了辩论。
这两个含义真的在社区中使用吗?是否存在这样的歧义?是否有一些备受推崇的来源在第二种意义上使用“Pure OCaml”的指针?
很难回答这样的问题,因为整个社区都被问到了。它们更适合 OCaml 邮件列表,尽管那里的人可能有点沮丧。
所以,我不能为整个社区回答,但我个人认为你就在这里。当有人说“纯 OCaml”时,他通常的意思是,一个程序只用 OCaml 语言实现,没有任何C
存根。
我从未听说过 OCaml 的功能纯子集。而且我怀疑,仅使用纯函数式语言特性来实现某些东西实际上是不可能的。例如,String
模块、异常、整个 IO 子系统,都是严格非纯的。
“纯 OCaml”是指仅用 OCaml 语言编写的应用程序或库。
它排除了Obj
模块的使用,因为它“不是 OCaml 语言的一部分”(caml-list 上的 Xavier Leroy http://article.gmane.org/gmane.comp.lang.caml.general/47389)。
根据上下文,它可能会或可能不会容忍标准 OCaml 发行版附带但不属于标准库 ( Str
, Unix
, ...) 的 C 库。
“纯 OCaml”绝对不是指“OCaml 的纯功能子集”。OCaml 的非功能性方面是 OCaml 本质上重要的部分(例如,Harper 提到了良性效果的价值),因此“纯 OCaml”不能意味着这一点。