1Ephemeron(3) OCaml library Ephemeron(3)
2
3
4
6 Ephemeron - Ephemerons and weak hash table
7
9 Module Ephemeron
10
12 Module Ephemeron
13 : sig end
14
15
16 Ephemerons and weak hash table
17
18
19
20
21
22
23
24 === Ephemerons and weak hash table are useful when one wants to cache
25 or memorize the computation of a function, as long as the arguments and
26 the function are used, without creating memory leaks by continuously
27 keeping old computation results that are not useful anymore because one
28 argument or the function is freed. An implementation using Hashtbl.t is
29 not suitable because all associations would keep in memory the argu‐
30 ments and the result. Ephemerons can also be used for adding a field
31 to an arbitrary boxed ocaml value: you can attach an information to a
32 value created by an external library without memory leaks. Ephemerons
33 hold some keys and one or no data. They are all boxed ocaml values. The
34 keys of an ephemeron have the same behavior than weak pointers accord‐
35 ing to the garbage collector. In fact ocaml weak pointers are imple‐
36 mented as ephemerons without data. The keys and data of an ephemeron
37 are said to be full if they point to a value, empty if the value have
38 never been set, have been unset, or was erased by the GC. In the func‐
39 tion that accesses the keys or data these two states are represented by
40 the option type. The data is considered by the garbage collector alive
41 if all the full keys are alive and if the ephemeron is alive. When one
42 of the keys is not considered alive anymore by the GC, the data is emp‐
43 tied from the ephemeron. The data could be alive for another reason and
44 in that case the GC will not free it, but the ephemeron will not hold
45 the data anymore. The ephemerons complicate the notion of liveness of
46 values, because it is not anymore an equivalence with the reachability
47 from root value by usual pointers (not weak and not ephemerons). With
48 ephemerons the notion of liveness is constructed by the least fixpoint
49 of: A value is alive if: - it is a root value - it is reachable from
50 alive value by usual pointers - it is the data of an alive ephemeron
51 with all its full keys alive Notes: - All the types defined in this
52 module cannot be marshaled using Pervasives.output_value or the func‐
53 tions of the Marshal module. Ephemerons are defined in a language
54 agnostic way in this paper: B. Hayes, Ephemerons: a New Finalization
55 Mechanism, OOPSLA'9 ===
56
57
58 module type S = sig end
59
60
61 The output signature of the functor Ephemeron.K1.Make and
62 Ephemeron.K2.Make . These hash tables are weak in the keys. If all the
63 keys of a binding are alive the binding is kept, but if one of the keys
64 of the binding is dead then the binding is removed.
65
66
67 module type SeededS = sig end
68
69
70 The output signature of the functor Ephemeron.K1.MakeSeeded and
71 Ephemeron.K2.MakeSeeded .
72
73
74 module K1 : sig end
75
76
77
78
79 module K2 : sig end
80
81
82
83
84 module Kn : sig end
85
86
87
88
89 module GenHashTable : sig end
90
91
92
93
94
95
96
97OCamldoc 2019-02-02 Ephemeron(3)