<!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>SMLNJLibrary - 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%;"> SMLNJLibrary <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"> The <a class="external" href="http://www.smlnj.org/doc/smlnj-lib/index.html"><img src="moin-www.png" alt="[WWW]" height="11" width="11">SML/NJ Library</a> is a collection of libraries that are distributed with SML/NJ. Due to differences between SML/NJ and MLton, these libraries will not work out-of-the box with MLton. <p> As of 20100402, MLton includes a port of the SML/NJ Library synchronized with SML/NJ version 110.72. </p> <h2 id="head-0bb18642b70b9f8a9c12ccf39487328f306b8e19">Usage</h2> <ul> <li> <p> You can import a sub-library of the SML/NJ Library into an MLB file with: <div> <table> <tr> <td align="center"> MLB file</td> <td align="center"> Description</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb</tt></td> <td> Various utility modules, included collections, simple formating, ...</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/Controls/controls-lib.mlb</tt></td> <td> A library for managing control flags in an application.</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/HashCons/hash-cons-lib.mlb</tt></td> <td> Support for implementing hash-consed data structures.</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/HTML/html-lib.mlb</tt></td> <td> HTML parsing and pretty-printing library.</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/INet/inet-lib.mlb</tt></td> <td> Networking utilities; supported on both Unix and Windows systems.</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/PP/pp-lib.mlb</tt></td> <td> Pretty-printing library.</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/Reactive/reactive-lib.mlb</tt></td> <td> Reactive scripting library.</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/RegExp/regexp-lib.mlb</tt></td> <td> Regular expression library.</td> </tr> <tr> <td> <tt>$(SML_LIB)/smlnj-lib/Unix/unix-lib.mlb</tt></td> <td> Utilities for Unix-based operating systems.</td> </tr> </p> </table> </div> </li> <li class="gap"> <p> If you are porting a project from SML/NJ's <a href="CompilationManager">CompilationManager</a> to MLton's <a href="MLBasis"> ML Basis system</a> using <tt>cm2mlb</tt>, note that the following maps are included by default: <pre>$smlnj-lib.cm $(SML_LIB)/smlnj-lib/Util $controls-lib.cm $(SML_LIB)/smlnj-lib/Controls $hash-cons-lib.cm $(SML_LIB)/smlnj-lib/HashCons $html-lib.cm $(SML_LIB)/smlnj-lib/HTML $inet-lib.cm $(SML_LIB)/smlnj-lib/INet $pp-lib.cm $(SML_LIB)/smlnj-lib/PP $reactive-lib.cm $(SML_LIB)/smlnj-lib/Reactive $regexp-lib.cm $(SML_LIB)/smlnj-lib/RegExp $unix-lib.cm $(SML_LIB)/smlnj-lib/Unix </pre> This will automatically convert a <tt>$/smlnj-lib.cm</tt> import in an input <tt>.cm</tt> file into a <tt>$(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb</tt> import in the output <tt>.mlb</tt> file. </p> </li> </ul> <h2 id="head-dc3decbb93847518f1a049dcf49d0d7c6560bcc6">Details</h2> <p> The following changes were made to the SML/NJ Library, in addition to deriving the <tt>.mlb</tt> files from the <tt>.cm</tt> files: </p> <ul> <li> <p> <tt>Util/redblack-set-fn.sml</tt> (modified): Rewrote use of <tt>where</tt> structure specification. </p> </li> <li> <p> <tt>Util/redblack-map-fn.sml</tt> (modified): Rewrote use of <tt>where</tt> structure specification. </p> </li> <li> <p> <tt>Util/graph-scc-fn.sml</tt> (modified): Rewrote use of <tt>where</tt> structure specification. </p> </li> <li> <p> <tt>Util/bit-array.sml</tt> (modified): The computation of the <tt>maxLen</tt> is given by: <pre>val maxLen = 8*Word8Array.maxLen </pre> This is fine in SML/NJ where <tt>Word8Array.maxLen</tt> is 16777215, but in MLton, <tt>Word8Array.maxLen</tt> is equal to <tt>valOf(Int.maxInt)</tt>, so the computation overflows. To accommodate both SML/NJ and MLton, the computation is replaced by <pre>val maxLen = (8*Word8Array.maxLen) handle Overflow => Word8Array.maxLen </pre> </p> </li> <li> <p> <tt>Util/engine.mlton.sml</tt> (added, not exported): Implements <tt>structure Engine</tt>, providing time-limited, resumable computations using <a href="MLtonThread">MLtonThread</a>, <a href="MLtonSignal">MLtonSignal</a>, and <a href="MLtonItimer">MLtonItimer</a>. </p> </li> <li> <p> <tt>Util/time-limit.mlton.sml</tt> (added): Implements <tt>structure TimeLimit</tt> using <tt>structure Engine</tt>. The SML/NJ implementation of <tt>structure TimeLimit</tt> uses SML/NJ's first-class continuations, signals, and interval timer. </p> </li> <li> <p> <tt>Util/time-limit.mlb</tt> (added): Exports <tt>structure TimeLimit</tt>, which is <em>not</em> exported by <tt>smlnj-lib.mlb</tt>. Since MLton is very conservative in the presence of threads and signals, program performance may be adversely affected by unnecessarily including <tt>structure TimeLimit</tt>. </p> </li> <li> <p> <tt>HTML/html-elements-fn.sml</tt> (modified): Rewrote use of <em>or-patterns</em>. </p> </li> <li> <p> <tt>HTML/html-attrs-fn.sml</tt> (modified): Rewrote use of <em>or-patterns</em>. </p> </li> </ul> <h2 id="head-190aa842474f4bfcec9c8cde305af27b7d07764d">Patch</h2> <ul> <li> <p> <a href = "http://mlton.org/cgi-bin/viewsvn.cgi/mlton/tags/on-MLTONWIKIVERSION-release/lib/smlnj-lib/smlnj-lib.patch?view=markup"><img src="moin-www.png" alt="[WWW]" height="11" width="11">smlnj-lib.patch</a> </p> </li> </ul> </div> <p> <hr> Last edited on 2010-06-08 14:42:48 by <span title="fenrir.cs.rit.edu"><a href="MatthewFluet">MatthewFluet</a></span>. </body></html>