Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / guide / localhost / Stabilizers
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
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">
9
10
11 <script type="text/javascript" src="./asciidoc.js"></script>
12 <script type="text/javascript">
13 /*<![CDATA[*/
14 asciidoc.install();
15 /*]]>*/
16 </script>
17 <link rel="stylesheet" href="./mlton.css" type="text/css">
18 </head>
19 <body class="article">
20 <div id="banner">
21 <div id="banner-home">
22 <a href="./Home">MLton 20180207</a>
23 </div>
24 </div>
25 <div id="header">
26 <h1>Stabilizers</h1>
27 </div>
28 <div id="content">
29 <div class="sect1">
30 <h2 id="_installation">Installation</h2>
31 <div class="sectionbody">
32 <div class="ulist"><ul>
33 <li>
34 <p>
35 Stabilizers currently require the MLton sources, this should be fixed by the next release
36 </p>
37 </li>
38 </ul></div>
39 </div>
40 </div>
41 <div class="sect1">
42 <h2 id="_license">License</h2>
43 <div class="sectionbody">
44 <div class="ulist"><ul>
45 <li>
46 <p>
47 Stabilizers are released under the MLton License
48 </p>
49 </li>
50 </ul></div>
51 </div>
52 </div>
53 <div class="sect1">
54 <h2 id="_instructions">Instructions</h2>
55 <div class="sectionbody">
56 <div class="ulist"><ul>
57 <li>
58 <p>
59 Download and build a source copy of MLton
60 </p>
61 </li>
62 <li>
63 <p>
64 Extract the tar.gz file attached to this page
65 </p>
66 </li>
67 <li>
68 <p>
69 Some examples are provided in the "examples/" sub directory, more examples will be added to this page in the following week
70 </p>
71 </li>
72 </ul></div>
73 </div>
74 </div>
75 <div class="sect1">
76 <h2 id="_bug_reports_suggestions">Bug reports / Suggestions</h2>
77 <div class="sectionbody">
78 <div class="ulist"><ul>
79 <li>
80 <p>
81 Please send any errors you encounter to schatzp and lziarek at cs.purdue.edu
82 </p>
83 </li>
84 <li>
85 <p>
86 We are looking to expand the usability of stabilizers
87 </p>
88 </li>
89 <li>
90 <p>
91 Please send any suggestions and desired functionality to the above email addresses
92 </p>
93 </li>
94 </ul></div>
95 </div>
96 </div>
97 <div class="sect1">
98 <h2 id="_note">Note</h2>
99 <div class="sectionbody">
100 <div class="ulist"><ul>
101 <li>
102 <p>
103 This is an alpha release. We expect to have another release shortly with added functionality soon
104 </p>
105 </li>
106 <li>
107 <p>
108 More documentation, such as signatures and descriptions of functionality, will be forthcoming
109 </p>
110 </li>
111 </ul></div>
112 </div>
113 </div>
114 <div class="sect1">
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>
121
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">&#39;a</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">&#39;b</span><span class="p">)</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="p">(</span><span class="n">&#39;a</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">&#39;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">-&gt;</span><span class="w"> </span><span class="n">&#39;a</span><span class="w"></span>
124
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">&#39;a</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">&#39;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">-&gt;</span><span class="w"> </span><span class="n">unit</span><span class="p">))</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"></span>
126 <span class="w"> </span><span class="p">((</span><span class="n">&#39;a</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="n">&#39;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">-&gt;</span><span class="w"> </span><span class="n">unit</span><span class="w"></span>
128
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">&#39;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">&#39;a</span><span class="p">)</span><span class="w"> </span><span class="p">-&gt;</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">&#39;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">&#39;a</span><span class="p">)</span><span class="w"> </span><span class="p">-&gt;</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>
135 <li>
136 <p>
137 <span class="monospaced">type checkpoint</span>
138 </p>
139 <div class="paragraph"><p>handle used to stabilize contexts other than the current one.</p></div>
140 </li>
141 <li>
142 <p>
143 <span class="monospaced">stable f</span>
144 </p>
145 <div class="paragraph"><p>returns a function identical to <span class="monospaced">f</span> that will execute within a stable section.</p></div>
146 </li>
147 <li>
148 <p>
149 <span class="monospaced">stabilize ()</span>
150 </p>
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>
156 </li>
157 <li>
158 <p>
159 <span class="monospaced">stableCP (f, comp)</span>
160 </p>
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>
165 </li>
166 <li>
167 <p>
168 <span class="monospaced">stabilizeCP cp</span>
169 </p>
170 <div class="paragraph"><p>same as stabilize except that the (possibly current) checkpoint to
171 stabilize is provided.</p></div>
172 </li>
173 <li>
174 <p>
175 <span class="monospaced">unmonitoredAssign (r, v)</span>
176 </p>
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>
179 </li>
180 <li>
181 <p>
182 <span class="monospaced">monitoredAssign (r, v)</span>
183 </p>
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>
186 </li>
187 </ul></div>
188 </div>
189 </div>
190 <div class="sect1">
191 <h2 id="_download">Download</h2>
192 <div class="sectionbody">
193 <div class="ulist"><ul>
194 <li>
195 <p>
196 <a href="Stabilizers.attachments/stabilizers_alpha_2006-10-09.tar.gz"><span class="monospaced">stabilizers_alpha_2006-10-09.tar.gz</span></a>
197 </p>
198 </li>
199 </ul></div>
200 </div>
201 </div>
202 <div class="sect1">
203 <h2 id="_also_see">Also see</h2>
204 <div class="sectionbody">
205 <div class="ulist"><ul>
206 <li>
207 <p>
208 <a href="References#ZiarekEtAl06">ZiarekEtAl06</a>
209 </p>
210 </li>
211 </ul></div>
212 </div>
213 </div>
214 </div>
215 <div id="footnotes"><hr></div>
216 <div id="footer">
217 <div id="footer-text">
218 </div>
219 <div id="footer-badges">
220 </div>
221 </div>
222 </body>
223 </html>