安装 OCaml 编译器
学习如何在本地计算机上安装 OCaml 编译器和 REPL 工具 utop,以及 OCaml 的编译过程。
OCaml 编译器
在本地机器上安装 OCaml 编译器的推荐方式是使用包管理器 OPAM。
首先,使用以下脚本安装 OPAM:
1$ sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
该脚本会检测计算机的架构,并默认将合适的预编译二进制文件下载并安装到 /usr/local/bin 目录。
通过终端输入以下命令验证 OPAM 是否安装成功:
1$ which opam 2/usr/local/bin/opam
接下来,按照 通过 OPAM 安装 OCaml 的说明 安装最新版本的 OCaml 编译器。本文撰写时,最新的 OCaml 编译器版本为 4.12.0。
1$ opam init 2$ eval `opam env` 3$ opam switch create 4.12.0 4$ eval `opam env`
之后,安装以下工具:
ocamlc:OCaml 字节码编译器,用于将 OCaml 源文件编译为字节码文件。ocamlopt:OCaml 本地代码编译器,用于将 OCaml 源文件编译为本地代码目标文件,并链接生成独立可执行程序。ocamlrun:字节码解释器,用于执行由ocamlc生成的字节码文件。
注意:继续之前,请确认 OCaml 字节码编译器已成功安装。
1$ which ocamlc 2/Users/quang/.opam/4.12.0/bin/ocamlc
REPL 工具 utop
在本地学习使用 OCaml 进行函数式编程的一个绝佳方式是使用读取-求值-打印循环(REPL)工具 utop。请使用前面提到的包管理器 OPAM 来安装 utop。
1$ opam install utop
在 shell 中输入 utop 即可启动它。
1$ utop
你应该能看到类似如下界面:
在 utop 中,每个表达式都以 ;; 结尾是约定。以下功能在使用 utop 时非常有用:
- 可按 “tab” 键自动补全。
- 可按 “上箭头” 键浏览之前输入过的表达式历史。
- 可以在多行中输入表达式,只要未以
;;结尾即可。
OCaml 编译流程
在开始编写代码之前,了解编译过程的工作原理很有帮助。为此,我们创建一个名为 hello.ml 的文件,内容如下:
1print_string "Hello world!\n";;
该程序有两种可能的编译和运行方式,如以下示意图所示:
OCaml 源代码 => 字节码 => 执行
图中左侧路径展示了使用 ocamlc 将 hello.ml 编译为字节码文件的过程。
1$ ocamlc -o hello.byte hello.ml
接着,使用 ocamlrun 字节码执行器来运行 hello.byte 文件。
1$ ocamlrun hello.byte 2Hello world!
这类似于 Java 程序被编译为 Java 字节码,然后由 Java 虚拟机(JVM)执行的方式。
OCaml 源代码 => 本地代码 => 执行
图中右侧路径展示了使用 ocamlopt 将 hello.ml 编译为本地代码文件的过程。
1$ ocamlopt -o hello.opt hello.ml
随后,操作系统可以直接执行 hello.opt,因为它已经是本地代码。
1$ ./hello.opt 2Hello world!
这与 C 编译器将 C 程序编译为可由目标操作系统直接运行的可执行文件的方式类似。