OCaml 的基础

本章将介绍 OCaml 的一些基本特性。但在我们深入学习 OCaml 之前,让我们先谈谈一个更大的概念:一般来说学习语言。

本课程的一个次要目标不仅是让您学会一门新的编程语言,还要提高您学习新语言的能力。

学习一门语言有五个基本组成部分:句法、语义、习语、库和工具。

语法。通过语法,我们指的是定义语言中何为文本上格式良好的程序的规则,包括关键字、对空格和格式的限制、标点符号、运算符等。学习一门新语言时最令人讨厌的一点可能是语法与你已经了解的语言相比感觉奇怪。但是你学习的语言越多,你就会越习惯接受语言的语法本身,而不是希望它不同。 (如果你想看看一些具有非常不寻常语法的语言,请看看需要自己的扩展键盘的 APL,以及由空格、制表符和换行符组成的 Whitespace。)你需要理解语法才能与计算机进行交流。

语义学。通过语义学,我们指的是定义程序行为的规则。换句话说,语义学关乎程序的含义——特定语法片段代表的计算。请注意,虽然“语义学”在形式上是复数,但我们将其视为单数。这类似于“数学”或“物理学”。

语义学有两个部分,即一种语言的动态语义和静态语义。动态语义定义了程序在执行或求值时的运行时行为。静态语义定义了在编译时进行的检查,以确保程序合法,超出任何语法要求。最重要的静态语义可能是类型检查:定义程序是否良好类型化的规则。学习一种新语言的语义通常是真正的挑战,尽管语法可能是您必须克服的第一个障碍。您需要理解语义以告诉计算机您的意思,并且需要表达您的意思,以便程序执行正确的计算。

习语。通过习语,我们指的是使用语言特征来表达计算的常见方法。鉴于您可能会在语言内部以多种方式表达一个计算,您会选择哪一种?有些方式比其他方式更自然。精通该语言的程序员会更倾向于某些表达方式。我们可以考虑在有效使用语言中的主导范式方面,无论是命令式的、函数式的、面向对象的等等。您需要理解成语,不仅要向计算机表达您的意思,还要向其他程序员表达。当您以成语方式编写代码时,其他程序员将更好地理解您的代码。

。库是已经为您编写的代码包,可以使您成为更高效的程序员,因为您不必自己编写代码。(有人说,对于程序员来说,懒惰是一种美德。)学习一门新语言的一部分是发现可用的库以及如何利用它们。一种语言通常提供一个标准库,让您访问一组核心功能,其中许多功能您自己无法在该语言中编写,比如文件 I/O。

工具。至少,任何语言实现都提供编译器或解释器作为与计算机交互的工具。但还有其他类型的工具:调试器;集成开发环境(IDE);以及用于性能、内存使用和正确性等方面的分析工具。学会使用与语言相关的工具也可以使您成为更有生产力的程序员。有时很容易混淆工具本身与语言;例如,如果您只使用过 Eclipse 和 Java,可能不会意识到 Eclipse 是一个可以与许多语言一起使用的 IDE,而 Java 也可以在没有 Eclipse 的情况下使用。

当涉及到在本书中学习 OCaml 时,我们的重点主要是语义和习语。当然,我们必须顺便学习语法,但这并不是我们研究的有趣部分。我们将接触到 OCaml 标准库和其他一些库,特别是 OUnit(类似于 JUnit、HUnit 等的单元测试框架)。除了 OCaml 编译器和构建系统,我们将使用的主要工具是 toplevel,它提供了与代码进行交互式实验的能力。