OCamlプログラムの実行方法
OCamlプログラムには以下の 3 つの実行方法がある
直接実行,対話的実行
ocaml
utop
ocamlktop
.cmoファイルを組み込んだ対話処理系を作れる
$ ocamlmktop -o greet hello.cmo main.cmo 依存されるファイルから並べる
バイトコードへコンパイルして実行
ocamlc
ocamlbuild
$ ocamlbuild ${name}.byteでバイトコードを、$ ocamlbuild ${name}.nativeでネイティブコードを作れる
依存関係の順にコンパイルを行ってくれる
ネイティブコードへコンパイルして実行
ocamlopt
またはDuneで始めるOCaml projectを参照
単一ファイルの実行
hello.mlがあるとき
code:ocaml
Printf.printf "hello\n"
直接実行,対話的実行
$ ocaml hello.mlで直接実行
対話
$ ocaml or $utopでREPLを起動し、#use "hello.ml";;する
$ ocaml -init hello.mlでREPLを起動する
バイトコードへコンパイルして実行
$ ocamlc hello.mlすると
a.out* hello.cmi hello.cmoが生成される
a.outは実行可能なので$ ./a.outでプログラムが実行される
ネイティブコードへコンパイルして実行
$ ocamlopt hello.mlすると
a.out* hello.cmi hello.cmx hello.oが生成される
$ ./a.outで実行
生成物
.cmi インタフェース(ファイル内で定義した名前と型)
.mliから生まれる
foo.mliが存在しない場合はfoo.mlで定義される名前がすべて公開される
.cmo バイトコード化したもの
.mlから生まれる
.cmx ネイティブコード化したもの
.o オブジェクトファイル
a.out 実行可能ファイル
インタフェース
.mlには実装を書く(C言語の.c)
.mliにはインタフェースを書く(C言語の.h)
参考
https://www.eidos.ic.i.u-tokyo.ac.jp/~tau/lecture/programming_languages/gen/slides/pdf/09-lexer-parser.pdf
OCaml tutorial