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