4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <meta name="generator" content="AsciiDoc 8.6.9">
6 <title>Stabilizers</title>
7 <link rel="stylesheet" href="./asciidoc.css" type="text/css">
8 <link rel="stylesheet" href="./pygments.css" type="text/css">
11 <script type="text/javascript" src="./asciidoc.js"></script>
12 <script type="text/javascript">
17 <link rel="stylesheet" href="./mlton.css" type="text/css">
19 <body class="article">
21 <div id="banner-home">
22 <a href="./Home">MLton 20180207</a>
30 <h2 id="_installation">Installation</h2>
31 <div class="sectionbody">
32 <div class="ulist"><ul>
35 Stabilizers currently require the MLton sources, this should be fixed by the next release
42 <h2 id="_license">License</h2>
43 <div class="sectionbody">
44 <div class="ulist"><ul>
47 Stabilizers are released under the MLton License
54 <h2 id="_instructions">Instructions</h2>
55 <div class="sectionbody">
56 <div class="ulist"><ul>
59 Download and build a source copy of MLton
64 Extract the tar.gz file attached to this page
69 Some examples are provided in the "examples/" sub directory, more examples will be added to this page in the following week
76 <h2 id="_bug_reports_suggestions">Bug reports / Suggestions</h2>
77 <div class="sectionbody">
78 <div class="ulist"><ul>
81 Please send any errors you encounter to schatzp and lziarek at cs.purdue.edu
86 We are looking to expand the usability of stabilizers
91 Please send any suggestions and desired functionality to the above email addresses
98 <h2 id="_note">Note</h2>
99 <div class="sectionbody">
100 <div class="ulist"><ul>
103 This is an alpha release. We expect to have another release shortly with added functionality soon
108 More documentation, such as signatures and descriptions of functionality, will be forthcoming
115 <h2 id="_documentation">Documentation</h2>
116 <div class="sectionbody">
117 <div class="listingblock">
118 <div class="content"><div class="highlight"><pre><span class="k">signature</span><span class="w"> </span><span class="n">STABLE</span><span class="w"> </span><span class="p">=</span><span class="w"></span>
119 <span class="w"> </span><span class="k">sig</span><span class="w"></span>
120 <span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="n">checkpoint</span><span class="w"></span>
122 <span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">stable</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">'a</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">'b</span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="p">(</span><span class="n">'a</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">'b</span><span class="p">)</span><span class="w"></span>
123 <span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">stabilize</span><span class="p">:</span><span class="w"> </span><span class="n">unit</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">'a</span><span class="w"></span>
125 <span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">stableCP</span><span class="p">:</span><span class="w"> </span><span class="p">((</span><span class="n">'a</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">'b</span><span class="p">)</span><span class="w"> </span><span class="n">*</span><span class="w"> </span><span class="p">(</span><span class="n">unit</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">unit</span><span class="p">))</span><span class="w"> </span><span class="p">-></span><span class="w"></span>
126 <span class="w"> </span><span class="p">((</span><span class="n">'a</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">'b</span><span class="p">)</span><span class="w"> </span><span class="n">*</span><span class="w"> </span><span class="n">checkpoint</span><span class="p">)</span><span class="w"></span>
127 <span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">stabilizeCP</span><span class="p">:</span><span class="w"> </span><span class="n">checkpoint</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">unit</span><span class="w"></span>
129 <span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">unmonitoredAssign</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">'a</span><span class="w"> </span><span class="n">ref</span><span class="w"> </span><span class="n">*</span><span class="w"> </span><span class="n">'a</span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">unit</span><span class="w"></span>
130 <span class="w"> </span><span class="k">val</span><span class="w"> </span><span class="n">monitoredAssign</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">'a</span><span class="w"> </span><span class="n">ref</span><span class="w"> </span><span class="n">*</span><span class="w"> </span><span class="n">'a</span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="n">unit</span><span class="w"></span>
131 <span class="w"> </span><span class="k">end</span><span class="w"></span>
132 </pre></div></div></div>
133 <div class="paragraph"><p><span class="monospaced">Stable</span> provides functions to manage stable sections.</p></div>
134 <div class="ulist"><ul>
137 <span class="monospaced">type checkpoint</span>
139 <div class="paragraph"><p>handle used to stabilize contexts other than the current one.</p></div>
143 <span class="monospaced">stable f</span>
145 <div class="paragraph"><p>returns a function identical to <span class="monospaced">f</span> that will execute within a stable section.</p></div>
149 <span class="monospaced">stabilize ()</span>
151 <div class="paragraph"><p>unrolls the effects made up to the current context to at least the
152 nearest enclosing <em>stable</em> section. These effects may have propagated
153 to other threads, so all affected threads are returned to a globally
154 consistent previous state. The return is undefined because control
155 cannot resume after stabilize is called.</p></div>
159 <span class="monospaced">stableCP (f, comp)</span>
161 <div class="paragraph"><p>returns a function <span class="monospaced">f'</span> and checkpoint tag <span class="monospaced">cp</span>. Function <span class="monospaced">f'</span> is
162 identical to <span class="monospaced">f</span> but when applied will execute within a stable
163 section. <span class="monospaced">comp</span> will be executed if <span class="monospaced">f'</span> is later stabilized. <span class="monospaced">cp</span>
164 is used by <span class="monospaced">stabilizeCP</span> to stabilize a given checkpoint.</p></div>
168 <span class="monospaced">stabilizeCP cp</span>
170 <div class="paragraph"><p>same as stabilize except that the (possibly current) checkpoint to
171 stabilize is provided.</p></div>
175 <span class="monospaced">unmonitoredAssign (r, v)</span>
177 <div class="paragraph"><p>standard assignment (<span class="monospaced">:=</span>). The version of CML distributed rebinds
178 <span class="monospaced">:=</span> to a monitored version so interesting effects can be recorded.</p></div>
182 <span class="monospaced">monitoredAssign (r, v)</span>
184 <div class="paragraph"><p>the assignment operator that should be used in programs that use
185 stabilizers. <span class="monospaced">:=</span> is rebound to this by including CML.</p></div>
191 <h2 id="_download">Download</h2>
192 <div class="sectionbody">
193 <div class="ulist"><ul>
196 <a href="Stabilizers.attachments/stabilizers_alpha_2006-10-09.tar.gz"><span class="monospaced">stabilizers_alpha_2006-10-09.tar.gz</span></a>
203 <h2 id="_also_see">Also see</h2>
204 <div class="sectionbody">
205 <div class="ulist"><ul>
208 <a href="References#ZiarekEtAl06">ZiarekEtAl06</a>
215 <div id="footnotes"><hr></div>
217 <div id="footer-text">
219 <div id="footer-badges">