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
是一个接收 string
as 输入的函数,并返回 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 脚本,utop
和 ocaml
没有太大区别。但 OCaml 社区的共同点是使用 utop
而不是 ocaml
。
事实上,ocaml
REPL 由 ocaml 分布提供。因此,此 REPL 遵循编译器的发布周期,如果你需要一些额外功能,则需要等待下一版本的编译器。utop
,正如我们解释的那样,在发行版之外,因此发布周期不受编译器的约束,如果你想要一个额外的功能,你将更有可能尝试在 utop
中推送这个功能而不是 ocaml
:)!
对于这一点(以及历史特征),ocaml 社区中的大多数人更喜欢使用 utop
而不是 ocaml
。