现在,您可以在喜欢的操作系统上使用OCaml发行版,我们可以在OCaml中创建您的第一个程序:Hello World!
我们有不同的方法来启动OCaml程序。
您可以与顶层交互地执行代码。使用OCaml toplevel,您可以将UNIX外壳程序编写和执行OCaml代码。之后,顶层将立即检查您的代码类型。因此,您可以快速轻松地测试代码的某些部分,而无需编译和执行。
您可以使用命令启动顶层ocaml。然后,您可以编写一个OCaml句子,;;该句子将立即被评估。顶级在紧随其后显示表达式的类型和值:
# "世界您好!";; - : string = "世界您好!"
也可以在文件上启动顶层。您可以看到有关此内容的说明。
为了方便您在顶层输入,可以使用ledit或的工具,该工具rlwrap提供了一些功能(例如输入历史记录):
$ ledit ocaml $ rlwrap ocaml
我们有两种不同的编译器,一种编译为字节码,另一种编译为本机代码。第一个与Java虚拟机的字节码相同。因此,字节码效率较低,但可移植性更高。
我们有一些OCaml编译器使用的扩展文件:
延期 | 定义 |
---|---|
.ml | 源代码(如.cC语言) |
.mli | 接口(如.hC语言) |
.cmo | 源代码通过编译ocamlc的字节码 |
.cmi | 接口代码由 ocamlc |
.cmx 和 .o | 由ocamlopt本机代码编译的源代码 |
.cma | 字节码中的库(部分存储桶*.cmo) |
.cmxa 和 .a | 本机代码库 |
.cmxs | 本机代码库(动态加载) |
该字节码编译器ocamlc。
您有不同的常用选项:
-c:编译没有链接过程的源文件(生成可执行文件)。因此,该命令将ocaml -c foo.ml生成一个.cmo文件。与不需要编译头文件的C不同,在OCaml中必须编译.mli文件:ocaml -c foo.mli。
您需要先编译接口。之后,当您编译源文件时,OCaml会尝试检查实现是否与接口匹配。
该.mli文件不是必需的。如果编译的.ml文件中没有.mli文件,OCaml将.cmi自动生成一个文件。
-o:将某些.cmo文件编译为可执行文件。例如:。这些文件需要按照与第一个文件没有依赖性的依赖性进行排列。ocamlc -o programfoo.cmobar.cmo
-I:表示编译器可以在其中找到编译所需文件的其他目录(例如接口或源代码)。它与-IC编译器中的相同。
我们还有许多其他选择。您可以参阅手册以获取更多信息。
因此,您可以编写hello.mlnow,然后编译该文件ocamlc -o hello hello.ml以生成字节码程序:
let () = print_endline "你好,世界!"
该let () = ...是你的程序的第一个条目(如mainC语言)。之后,我们将函数print_endline(由标准库提供)与参数"你好,世界!"一起Hello Worlds使用,以在标准输出中以换行符进行打印。
编译后,您将拥有该.cmo文件以及.cmi该编译器和您的程序自动生成的文件hello。您可以打开程序,在该文件的顶部,您可以看到:
#!/usr/local/bin/ocamlrun
这意味着您的程序需要该ocamlrun程序(由发行版提供)来执行字节码(例如JVM)。
我们还有另一个生成本机代码的编译器。编译器为:ocamlopt。但是,生成的可执行文件无法在大多数其他体系结构上运行。
ocamlopt使用与相同的选项,ocamlc因此您可以执行ocamlopt -o hello hello.ml。之后,您可以看到.cmx和.o文件。
最后,从您的字节码/本机代码程序,您可以执行:
$ ./hello 你好,世界! $