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
。