从渊源上来说,OCaml 起源于 Lisp 编程语言,包括其他现代语言,如 Clojure、F#、Haskell 和 Racket。
OCaml最初是由罗宾·米尔纳 (Robin Milner) 等人在苏格兰爱丁堡计算机科学实验室 (Edinburgh Laboratory for Computer Science) 进行的工作。他们在20世纪70年代末和80年代初从事定理证明器的研究。传统上,定理证明器是用诸如Lisp这样的语言实现的。米尔纳遇到了一个问题,那就是定理证明器有时会将不正确的“证明”(即非证明)组合在一起,并声称它们是有效的。因此,他尝试开发一种只允许构造有效证明的语言。ML(Meta Language)是这项工作的结果。ML的类型系统被精心构建,以便只能在该语言中构造有效的证明。然后,将其编写为程序以构造证明的定理证明器。最终,这种“经典的ML”演变成了一种完整的编程语言。
在20世纪80年代初,ML社区出现了分裂,法国一方与英国和美国另一方。法国人继续开发CAML,后来发展成为Objective CAML(OCaml),而英国和美国人则发展了标准ML(Standard ML)。这两种方言非常相似。微软在2005年推出了自己的 OCaml 变种,称为F#。
米尔纳在 1991 年获得了图灵奖,很大程度上是因为他在机器学习方面的工作。ACM 网站上对他的获奖进行了如下赞扬:
ML 远远领先于它的时代。它是建立在干净和良好连接的数学思想上的,经过梳理,它们可以被独立研究,并相对容易地混合和重复使用。ML对许多实用语言产生了影响,包括 Java、Scala 和微软的 F#。事实上,任何认真的语言设计师都不应该忽视这个优秀设计的例子。
注:本书是康奈尔大学 CS 3110 数据结构和函数式编程的教材。原书为英文版,在学习的过程中,根据自己的理解,翻译了一些,做一个记录,版权归原作者所有,如有侵权,请联系我删除。