Import Upstream version 20180207
[hcoop/debian/mlton.git] / doc / guide / src / Stabilizers.adoc
CommitLineData
7f918cf1
CE
1Stabilizers
2===========
3
4== Installation ==
5
6* Stabilizers currently require the MLton sources, this should be fixed by the next release
7
8== License ==
9
10* Stabilizers are released under the MLton License
11
12== Instructions ==
13
14* Download and build a source copy of MLton
15* Extract the tar.gz file attached to this page
16* Some examples are provided in the "examples/" sub directory, more examples will be added to this page in the following week
17
18== Bug reports / Suggestions ==
19
20* Please send any errors you encounter to schatzp and lziarek at cs.purdue.edu
21* We are looking to expand the usability of stabilizers
22* Please send any suggestions and desired functionality to the above email addresses
23
24== Note ==
25
26* This is an alpha release. We expect to have another release shortly with added functionality soon
27* More documentation, such as signatures and descriptions of functionality, will be forthcoming
28
29
30== Documentation ==
31
32[source,sml]
33----
34signature STABLE =
35 sig
36 type checkpoint
37
38 val stable: ('a -> 'b) -> ('a -> 'b)
39 val stabilize: unit -> 'a
40
41 val stableCP: (('a -> 'b) * (unit -> unit)) ->
42 (('a -> 'b) * checkpoint)
43 val stabilizeCP: checkpoint -> unit
44
45 val unmonitoredAssign: ('a ref * 'a) -> unit
46 val monitoredAssign: ('a ref * 'a) -> unit
47 end
48----
49
50
51`Stable` provides functions to manage stable sections.
52
53* `type checkpoint`
54+
55handle used to stabilize contexts other than the current one.
56
57* `stable f`
58+
59returns a function identical to `f` that will execute within a stable section.
60
61* `stabilize ()`
62+
63unrolls the effects made up to the current context to at least the
64nearest enclosing _stable_ section. These effects may have propagated
65to other threads, so all affected threads are returned to a globally
66consistent previous state. The return is undefined because control
67cannot resume after stabilize is called.
68
69* `stableCP (f, comp)`
70+
71returns a function `f'` and checkpoint tag `cp`. Function `f'` is
72identical to `f` but when applied will execute within a stable
73section. `comp` will be executed if `f'` is later stabilized. `cp`
74is used by `stabilizeCP` to stabilize a given checkpoint.
75
76* `stabilizeCP cp`
77+
78same as stabilize except that the (possibly current) checkpoint to
79stabilize is provided.
80
81* `unmonitoredAssign (r, v)`
82+
83standard assignment (`:=`). The version of CML distributed rebinds
84`:=` to a monitored version so interesting effects can be recorded.
85
86* `monitoredAssign (r, v)`
87+
88the assignment operator that should be used in programs that use
89stabilizers. `:=` is rebound to this by including CML.
90
91== Download ==
92
93* <!Attachment(Stabilizers,stabilizers_alpha_2006-10-09.tar.gz)>
94
95== Also see ==
96
97* <!Cite(ZiarekEtAl06)>