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. * Adam Chlipala has a http://adam.chlipala.net/mlcomp[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 http://www.mlton.org/mailman/listinfo/mlton[developer list].