Hello World

此示例假定你已安装 OCaml

编译 OCaml 代码

创建一个名为 hello.ml 的新文件,其中包含以下内容:

print_string "Hello world!\n"

ocamlc 是 OCaml 编译器。要编译并运行此脚本,请运行

$ ocamlc -o hello hello.ml

然后执行生成的二进制文件

$ ./hello
Hello world!

执行 OCaml 代码

你也可以运行此脚本,而无需将其编译为二进制文件。你可以使用 ocaml 这一 ocaml 顶级系统来实现这一目标,该系统允许交互使用 OCaml。在你的 shell 中,只需运行即可

$ ocaml hello.ml
Hello world!

在 REPL 中

打开一个新 shell,键入 ocaml 打开顶层系统。进入会话后,你可以键入相同的程序:

       OCaml version 4.02.1

# print_string "hello world!\n";;

按 enter 键评估表达式,然后触发打印。

hello world!
- : unit = ()

成功! 我们看到它打印了 hello world!,但是关于什么是 - : unit = ()?OCaml 没有语句,一切都是一个表达式,可以计算某些类型的值。在这种情况下,print_string 是一个接收 stringas 输入的函数,并返回 unit。将 unit 视为只能获取一个值 ()(也称为单位)的类型,并表示不返回任何有意义值的已完成计算。

在这种情况下,print_string 还具有将接收到的字符作为输入放在屏幕上的副作用,这就是我们看到第一行的原因。

要退出 REPL,请按 ctrl+D

作为 Unix 脚本

我们有两种方法来创建 OCaml 脚本。第一个使用系统顶层(由包管理器提供,如 apt-get),第二个使用 OPAM 提供的顶层。

使用系统顶级

打开你最喜欢的编辑器,然后写:

#!/usr/bin/ocaml

print_string "hello worlds!\n";;

之后,你可以使用 chmod +x your_file.ml,你可以用 ./your_file.ml 执行你的脚本。

使用 OPAM 提供的顶层

#!/usr/bin/env ocaml

print_string "hello worlds!\n";;

最大的区别在于你的顶级版本。实际上,如果你使用特定开关(如 opam switch 4.03.0)配置 OPAM,脚本将使用 OCaml 4.03.0。在第一种方式中,例如在 Debian Sid 中,脚本将使用 OCaml 4.02.3。

你可以用 #!/usr/bin/env utop 替换 shebang 来使用 utop 而不是香草顶层。

UTOP

utop 是另一个 ocaml toplevel 发布 - 这意味着,你需要下载并安装 utop(简单的方法是使用 OPAM:opam install utop)。utop 具有许多功能,如历史,完成和交互式线编辑。

所以,如果你想要一个简单的方法来尝试一些 ocaml 代码,utop 是最好的。

为什么 utop 而不是 ocaml

如果你想要一个像上面这样的 ocaml 脚本,utopocaml 没有太大区别。但 OCaml 社区的共同点是使用 utop 而不是 ocaml

事实上,ocaml REPL 由 ocaml 分布提供。因此,此 REPL 遵循编译器的发布周期,如果你需要一些额外功能,则需要等待下一版本的编译器。utop,正如我们解释的那样,在发行版之外,因此发布周期不受编译器的约束,如果你想要一个额外的功能,你将更有可能尝试在 utop 中推送这个功能而不是 ocaml :)!

对于这一点(以及历史特征),ocaml 社区中的大多数人更喜欢使用 utop 而不是 ocaml