Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / doc / guide / localhost / Stabilizers
CommitLineData
7f918cf1
CE
1<!DOCTYPE html>\r
2<html lang="en">\r
3<head>\r
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
5<meta name="generator" content="AsciiDoc 8.6.9">\r
6<title>Stabilizers</title>\r
7<link rel="stylesheet" href="./asciidoc.css" type="text/css">\r
8<link rel="stylesheet" href="./pygments.css" type="text/css">\r
9\r
10\r
11<script type="text/javascript" src="./asciidoc.js"></script>\r
12<script type="text/javascript">\r
13/*<![CDATA[*/\r
14asciidoc.install();\r
15/*]]>*/\r
16</script>\r
17<link rel="stylesheet" href="./mlton.css" type="text/css">\r
18</head>\r
19<body class="article">\r
20<div id="banner">\r
21<div id="banner-home">\r
22<a href="./Home">MLton 20180207</a>\r
23</div>\r
24</div>\r
25<div id="header">\r
26<h1>Stabilizers</h1>\r
27</div>\r
28<div id="content">\r
29<div class="sect1">\r
30<h2 id="_installation">Installation</h2>\r
31<div class="sectionbody">\r
32<div class="ulist"><ul>\r
33<li>\r
34<p>\r
35Stabilizers currently require the MLton sources, this should be fixed by the next release\r
36</p>\r
37</li>\r
38</ul></div>\r
39</div>\r
40</div>\r
41<div class="sect1">\r
42<h2 id="_license">License</h2>\r
43<div class="sectionbody">\r
44<div class="ulist"><ul>\r
45<li>\r
46<p>\r
47Stabilizers are released under the MLton License\r
48</p>\r
49</li>\r
50</ul></div>\r
51</div>\r
52</div>\r
53<div class="sect1">\r
54<h2 id="_instructions">Instructions</h2>\r
55<div class="sectionbody">\r
56<div class="ulist"><ul>\r
57<li>\r
58<p>\r
59Download and build a source copy of MLton\r
60</p>\r
61</li>\r
62<li>\r
63<p>\r
64Extract the tar.gz file attached to this page\r
65</p>\r
66</li>\r
67<li>\r
68<p>\r
69Some examples are provided in the "examples/" sub directory, more examples will be added to this page in the following week\r
70</p>\r
71</li>\r
72</ul></div>\r
73</div>\r
74</div>\r
75<div class="sect1">\r
76<h2 id="_bug_reports_suggestions">Bug reports / Suggestions</h2>\r
77<div class="sectionbody">\r
78<div class="ulist"><ul>\r
79<li>\r
80<p>\r
81Please send any errors you encounter to schatzp and lziarek at cs.purdue.edu\r
82</p>\r
83</li>\r
84<li>\r
85<p>\r
86We are looking to expand the usability of stabilizers\r
87</p>\r
88</li>\r
89<li>\r
90<p>\r
91Please send any suggestions and desired functionality to the above email addresses\r
92</p>\r
93</li>\r
94</ul></div>\r
95</div>\r
96</div>\r
97<div class="sect1">\r
98<h2 id="_note">Note</h2>\r
99<div class="sectionbody">\r
100<div class="ulist"><ul>\r
101<li>\r
102<p>\r
103This is an alpha release. We expect to have another release shortly with added functionality soon\r
104</p>\r
105</li>\r
106<li>\r
107<p>\r
108More documentation, such as signatures and descriptions of functionality, will be forthcoming\r
109</p>\r
110</li>\r
111</ul></div>\r
112</div>\r
113</div>\r
114<div class="sect1">\r
115<h2 id="_documentation">Documentation</h2>\r
116<div class="sectionbody">\r
117<div class="listingblock">\r
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>\r
119<span class="w"> </span><span class="k">sig</span><span class="w"></span>\r
120<span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="n">checkpoint</span><span class="w"></span>\r
121\r
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>\r
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>\r
124\r
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>\r
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>\r
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>\r
128\r
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>\r
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>\r
131<span class="w"> </span><span class="k">end</span><span class="w"></span>\r
132</pre></div></div></div>\r
133<div class="paragraph"><p><span class="monospaced">Stable</span> provides functions to manage stable sections.</p></div>\r
134<div class="ulist"><ul>\r
135<li>\r
136<p>\r
137<span class="monospaced">type checkpoint</span>\r
138</p>\r
139<div class="paragraph"><p>handle used to stabilize contexts other than the current one.</p></div>\r
140</li>\r
141<li>\r
142<p>\r
143<span class="monospaced">stable f</span>\r
144</p>\r
145<div class="paragraph"><p>returns a function identical to <span class="monospaced">f</span> that will execute within a stable section.</p></div>\r
146</li>\r
147<li>\r
148<p>\r
149<span class="monospaced">stabilize ()</span>\r
150</p>\r
151<div class="paragraph"><p>unrolls the effects made up to the current context to at least the\r
152nearest enclosing <em>stable</em> section. These effects may have propagated\r
153to other threads, so all affected threads are returned to a globally\r
154consistent previous state. The return is undefined because control\r
155cannot resume after stabilize is called.</p></div>\r
156</li>\r
157<li>\r
158<p>\r
159<span class="monospaced">stableCP (f, comp)</span>\r
160</p>\r
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\r
162identical to <span class="monospaced">f</span> but when applied will execute within a stable\r
163section. <span class="monospaced">comp</span> will be executed if <span class="monospaced">f'</span> is later stabilized. <span class="monospaced">cp</span>\r
164is used by <span class="monospaced">stabilizeCP</span> to stabilize a given checkpoint.</p></div>\r
165</li>\r
166<li>\r
167<p>\r
168<span class="monospaced">stabilizeCP cp</span>\r
169</p>\r
170<div class="paragraph"><p>same as stabilize except that the (possibly current) checkpoint to\r
171stabilize is provided.</p></div>\r
172</li>\r
173<li>\r
174<p>\r
175<span class="monospaced">unmonitoredAssign (r, v)</span>\r
176</p>\r
177<div class="paragraph"><p>standard assignment (<span class="monospaced">:=</span>). The version of CML distributed rebinds\r
178<span class="monospaced">:=</span> to a monitored version so interesting effects can be recorded.</p></div>\r
179</li>\r
180<li>\r
181<p>\r
182<span class="monospaced">monitoredAssign (r, v)</span>\r
183</p>\r
184<div class="paragraph"><p>the assignment operator that should be used in programs that use\r
185stabilizers. <span class="monospaced">:=</span> is rebound to this by including CML.</p></div>\r
186</li>\r
187</ul></div>\r
188</div>\r
189</div>\r
190<div class="sect1">\r
191<h2 id="_download">Download</h2>\r
192<div class="sectionbody">\r
193<div class="ulist"><ul>\r
194<li>\r
195<p>\r
196<a href="Stabilizers.attachments/stabilizers_alpha_2006-10-09.tar.gz"><span class="monospaced">stabilizers_alpha_2006-10-09.tar.gz</span></a>\r
197</p>\r
198</li>\r
199</ul></div>\r
200</div>\r
201</div>\r
202<div class="sect1">\r
203<h2 id="_also_see">Also see</h2>\r
204<div class="sectionbody">\r
205<div class="ulist"><ul>\r
206<li>\r
207<p>\r
208<a href="References#ZiarekEtAl06">ZiarekEtAl06</a>\r
209</p>\r
210</li>\r
211</ul></div>\r
212</div>\r
213</div>\r
214</div>\r
215<div id="footnotes"><hr></div>\r
216<div id="footer">\r
217<div id="footer-text">\r
218</div>\r
219<div id="footer-badges">\r
220</div>\r
221</div>\r
222</body>\r
223</html>\r