OCamlことはじめ

言語の中身に入る前におさえておくこと。
型推論がどうとか、関数型プログラミングがどうとか言う前の問題について。

http://caml.inria.fr/download.en.html
から、
Self installer (3.11.0) for the port based on the MinGW toolchain
をダウンロードしてインストールした。

処理系

OCamlの処理系は、インタプリタ(ocaml)とバイトコードコンパイラ(ocamlc)とネイティブコンパイラ(ocamlc.opt)の3種類が提供されている。なのでソースファイル hello.ml 3種類の方法で処理できる。

hello.ml

let _=print_endline "hello !"
インタプリタ(ocaml)

ソースを直接実行する。

> ocaml hello.ml
hello !
バイトコードコンパイラ(ocamlc)

ソースをバイトコードコンパイル(cmo)して、実行形式(exe)にリンクする。

> ocamlc -o hello.exe hello.ml
> ls
hello.cmi
hello.cmo
hello.exe
hello.ml
> hello.exe
hello !
ネイティブコンパイラ(ocamlopt)

ソースをネイティブ形式(cmx)にコンパイして、実行形式(exe)にリンクする。

> ocamlopt -o hello_native.exe hello.ml
** Fatal error: Cannot find file "libws2_32"
File "caml_startup", line 1, characters 0-1:
Error: Error during linking

標準の位置(Windowsの場合はどこ?)以外にCのライブラリが置いてある場合は、-ccoptでリンカにライブラリの場所を指示しなければならない。

> ocamlopt -o hello_native.exe -ccopt "-LC:/i686-pc-mingw32/lib" hello.ml
hello.cmi
hello.cmx
hello.ml
hello.o
hello_native.exe
> hello_native.exe
hello !

あらかじめC:/i686-pc-mingw32にMinGWを一式用意していた。
http://www.mingw.org/

最低限
binutils, gcc, win32-runtimeあたり

> ls *.exe
> ls -l *.exe
-rwx    38812 2011-06-02 01:03 hello.exe*
-rwx   224725 2011-06-02 01:03 hello_native.exe*