OCaml
=====

http://caml.inria.fr/[OCaml] is a variant of <:ML:> and is similar to
<:StandardML:Standard ML>.

== OCaml and SML ==

Here's a comparison of some aspects of the OCaml and SML languages.

* Standard ML has a formal <:DefinitionOfStandardML:Definition>, while
OCaml is specified by its lone implementation and informal
documentation.

* Standard ML has a number of <:StandardMLImplementations:compilers>,
while OCaml has only one.

* OCaml has built-in support for object-oriented programming, while
Standard ML does not (however, see <:ObjectOrientedProgramming:>).

* Andreas Rossberg has a
http://www.mpi-sws.org/%7Erossberg/sml-vs-ocaml.html[side-by-side
comparison] of the syntax of SML and OCaml.

== OCaml and MLton ==

Here's a comparison of some aspects of OCaml and MLton.

* Performance

** Both OCaml and MLton have excellent performance.

** MLton performs extensive <:WholeProgramOptimization:>, which can
provide substantial improvements in large, modular programs.

** MLton uses native types, like 32-bit integers, without any penalty
due to tagging or boxing.  OCaml uses 31-bit integers with a penalty
due to tagging, and 32-bit integers with a penalty due to boxing.

** MLton uses native types, like 64-bit floats, without any penalty
due to boxing.  OCaml, in some situations, boxes 64-bit floats.

** MLton represents arrays of all types unboxed.  In OCaml, only
arrays of 64-bit floats are unboxed, and then only when it is
syntactically apparent.

** MLton represents records compactly by reordering and packing the
fields.

** In MLton, polymorphic and monomorphic code have the same
performance.  In OCaml, polymorphism can introduce a performance
penalty.

** In MLton, module boundaries have no impact on performance.  In
OCaml, moving code between modules can cause a performance penalty.

** MLton's <:ForeignFunctionInterface:> is simpler than OCaml's.

* Tools

** OCaml has a debugger, while MLton does not.

** OCaml supports separate compilation, while MLton does not.

** OCaml compiles faster than MLton.

** MLton supports profiling of both time and allocation.

* Libraries

** OCaml has more available libraries.

* Community

** OCaml has a larger community than MLton.

** MLton has a very responsive
   http://www.mlton.org/mailman/listinfo/mlton[developer list].
