<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta name="robots" content="index,nofollow"> <title>OCaml - MLton Standard ML Compiler (SML Compiler)</title> <link rel="stylesheet" type="text/css" charset="iso-8859-1" media="all" href="common.css"> <link rel="stylesheet" type="text/css" charset="iso-8859-1" media="screen" href="screen.css"> <link rel="stylesheet" type="text/css" charset="iso-8859-1" media="print" href="print.css"> <link rel="Start" href="Home"> </head> <body lang="en" dir="ltr"> <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "UA-833377-1"; urchinTracker(); </script> <table bgcolor = lightblue cellspacing = 0 style = "border: 0px;" width = 100%> <tr> <td style = " border: 0px; color: darkblue; font-size: 150%; text-align: left;"> <a class = mltona href="Home">MLton MLTONWIKIVERSION</a> <td style = " border: 0px; font-size: 150%; text-align: center; width: 50%;"> OCaml <td style = " border: 0px; text-align: right;"> <table cellspacing = 0 style = "border: 0px"> <tr style = "vertical-align: middle;"> </table> <tr style = "background-color: white;"> <td colspan = 3 style = " border: 0px; font-size:70%; text-align: right;"> <a href = "Home">Home</a> <a href = "TitleIndex">Index</a> </table> <div id="content" lang="en" dir="ltr"> <a class="external" href="http://caml.inria.fr/"><img src="moin-www.png" alt="[WWW]" height="11" width="11">OCaml</a> is a variant of <a href="ML">ML</a> and is similar to <a href="StandardML">Standard ML</a>. <h2 id="head-bdb603a1546c889e07912df83fb168fdc6469ce8">OCaml and SML</h2> <p> Here's a comparison of some aspects of the OCaml and SML languages. </p> <ul> <li> <p> Standard ML has a formal <a href="DefinitionOfStandardML">Definition</a>, while OCaml is specified by its lone implementation and informal documentation. </p> </li> <li class="gap"> <p> Standard ML has a number of <a href="StandardMLImplementations">compilers</a>, while OCaml has only one. </p> </li> <li class="gap"> <p> OCaml has built-in support for object-oriented programming, while Standard ML does not (however, see <a href="ObjectOrientedProgramming">ObjectOrientedProgramming</a>). </p> </li> <li class="gap"> <p> Andreas Rossberg has a <a class="external" href="http://www.mpi-sws.org/~rossberg/sml-vs-ocaml.html"><img src="moin-www.png" alt="[WWW]" height="11" width="11">side-by-side comparison</a> of the syntax of SML and OCaml. </p> </li> </ul> <h2 id="head-305cf7c02f3e0da3e842ba7d0bcefe80ed2dbfd1">OCaml and MLton</h2> <p> Here's a comparison of some aspects of OCaml and MLton. </p> <ul> <li> <p> Performance </p> </li> <ul> <li> <p> Both OCaml and MLton have excellent performance. </p> </li> <li class="gap"> <p> MLton performs extensive <a href="WholeProgramOptimization">WholeProgramOptimization</a>, which can provide substantial improvements in large, modular programs. </p> </li> <li class="gap"> <p> 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. </p> </li> <li class="gap"> <p> MLton uses native types, like 64-bit floats, without any penalty due to boxing. OCaml, in some situations, boxes 64-bit floats. </p> </li> <li class="gap"> <p> 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. </p> </li> <li class="gap"> <p> MLton represents records compactly by reordering and packing the fields. </p> </li> <li class="gap"> <p> In MLton, polymorphic and monomorphic code have the same performance. In OCaml, polymorphism can introduce a performance penalty. </p> </li> <li class="gap"> <p> In MLton, module boundaries have no impact on performance. In OCaml, moving code between modules can cause a performance penalty. </p> </li> </ul> <li class="gap"> <p> MLton's <a href="ForeignFunctionInterface">ForeignFunctionInterface</a> is simpler than OCaml's. </p> </li> <li class="gap"> <p> Tools </p> </li> <ul> <li> <p> OCaml has a debugger, while MLton does not. </p> </li> <li class="gap"> <p> OCaml supports separate compilation, while MLton does not. </p> </li> <li class="gap"> <p> OCaml compiles faster than MLton. </p> </li> <li class="gap"> <p> MLton supports profiling of both time and allocation. </p> </li> </ul> <li class="gap"> <p> Libraries </p> </li> <ul> <li> <p> OCaml has more available libraries. </p> </li> </ul> <li class="gap"> <p> Community </p> </li> <ul> <li> <p> OCaml has a larger community than MLton. </p> </li> <li class="gap"> <p> MLton has a very responsive <a class="external" href="http://www.mlton.org/mailman/listinfo/mlton"><img src="moin-www.png" alt="[WWW]" height="11" width="11">developer list</a>. </p> </li> </ul> </ul> </div> <p> <hr> Last edited on 2009-09-20 00:47:19 by <span title="v129-22-126-87.VCLIENT.CWRU.Edu">RanAriGur</span>. </body></html>