As your OCaml programs grow bigger, it is a good idea to use a build system. Ocamlbuild is quite good at this job ! It will take care of your dependencies, find libraries and more importantly compile the files in the right order…
It took me a while to find the answer to the simple question, how to use
ocamlopt instead of the default compiler. Assuming you want to compile a main.ml file, the short answer is to use
ocamlbuild main.native, instead of
ocamlopt and ocamlc
OCaml comes with two compilers : ocamlc and ocamlopt.
ocamlc is the bytecode compiler, and
ocamlopt is the native code compiler. If you don’t know which one to use, use
ocamlopt since it provides standalone executables that are normally faster than bytecode.
For a very quick benchmark let’s sort a long list.
let a = List.init 1000000 (fun x -> Random.int 500) ;; let b = List.sort compare a ;; print_string "done;\n";
And compile this with the different compilers…
ocamlbuild main.native echo "native" time ./main.native rm main.native rm -rf _build/ ocamlbuild main.byte echo "byte" time ./main.byte rm main.byte rm -rf _build/
And the results are quite convincing.
Finished, 4 targets (0 cached) in 00:00:00. native done; real 0m2.156s user 0m2.064s sys 0m0.088s Finished, 3 targets (0 cached) in 00:00:00. byte done; real 0m6.340s user 0m6.268s sys 0m0.068s
Real World OCaml: Functional programming for the masses by Yaron Minsky, Anil Madhavapeddy and Jason Hickey is a good introduction to OCaml.