Goの言語仕様が変わって周辺ライブラリのコンパイルが通らなくなったので、とりあえずGoは放置してOCamlでThriftを試すことにした。その前段階としてOCamlの適当なサンプルでも書いてみる。
OCaml自体は結構前から知ってたけど、使う機会も無いしなんとなく書きかたが気持ちわるかったから敬遠してた。まあこの際だから試そう。
環境のセットアップ
Ubuntuならラクチン。
$ sudo apt-get install ocaml ocaml-mode
hello.ml
(* util functions *)
let concat (x, y) =
x ^ " " ^ y;;
(* main function *)
let msg = "konnichiwa" in
let name = "aardvark" in
let con = concat(msg, name) in
print_endline con ;;
Makefile
コンパイルすると*.cmiというインタフェースの情報を記述したファイルと*.cmoというオブジェクトファイルができるけど、単純に実行バイナリを作るのに必要なのは*.cmoだけっぽい。実際、ソースをコンパイルしたあとにできる*.cmiファイルを消して、そのうえでリンクしても問題無かった。
BIN=hello
SRC=hello.ml
CAMLC=ocamlc
OBJ=$(SRC:.cmo=.ml)
$(BIN): $(OBJ)
$(CAMLC) -o $(BIN) $(OBJ)
.ml.cmo:
$(CAMLC) -c $<
clean:
rm -f *.cm[iox] *~ .*~ #*#
rm -f $(BIN)
出力
$ make ocamlc -o hello hello.ml $ file hello.cmi hello.cmi: OCaml interface file (.cmi) (Version 011) $ file hello.cmo hello.cmo: OCaml object file (.cmo) (Version 007) $ ./hello konnichiwa aardvark
末尾のセミコロン二つがちょっと気持ち悪い。