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 !"
バイトコードコンパイラ(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*