OCaml and SML
Here's a comparison of some aspects of the OCaml and SML languages.
- 
Standard ML has a formal Definition, while OCaml is specified by its lone implementation and informal documentation.
 - 
Standard ML has a number of 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
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
developer list.