MLton 20210117

# OCaml

OCaml is a variant of ML and is similar to Standard ML.

## 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.

- Adam Chlipala has a point-by-point comparison of OCaml and SML.

## 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.