1 (* sharing on a non
-object
*)
2 val () = MLton
.share
13
4 (* tuple option array
*)
5 val a
= Array
.tabulate (100, fn i
=> SOME (i
mod 2, i
mod 3))
6 val () = Array
.update (a
, 0, NONE
)
9 (print (concat
["size of a is ", Int.toString (MLton
.size a
), "\n"])
10 ; Array
.appi (fn (i
, z
) =>
11 print (concat
[Int.toString i
, " => ",
15 concat
["(", Int.toString a
, ", ",
20 val () = MLton
.share a
23 (* tuple option array
with pre
-existing
sharing *)
24 val a
= Array
.tabulate (100, fn i
=>
27 else SOME (i
mod 3, i
mod 3))
28 val () = Array
.update (a
, 0, NONE
)
30 (print (concat
["size of a is ", Int.toString (MLton
.size a
), "\n"])
31 ; Array
.appi (fn (i
, z
) =>
32 print (concat
[Int.toString i
, " => ",
36 concat
["(", Int.toString a
, ", ",
40 val () = MLton
.share a
43 (* tuple option ref array
*)
45 val a
= Array
.tabulate (100, fn i
=> ref (SOME (i
mod 2, i
mod 3)))
46 val () = Array
.sub (a
, 0) := NONE
49 (print (concat
["size of a is ", Int.toString (MLton
.size a
), "\n"])
50 ; Array
.appi (fn (i
, z
) =>
51 print (concat
[Int.toString i
, " => ",
55 concat
["(", Int.toString a
, ", ",
60 val () = MLton
.share a
62 val () = Array
.appi (fn (i
, r
) =>
63 r
:= (if i
= 0 then NONE
else (SOME (i
mod 2, i
mod 3)))) a
66 (* big tuple option array
*)
67 val a
= Array
.tabulate (100000, fn i
=> SOME (i
mod 2, i
mod 3))
68 val () = Array
.update (a
, 0, NONE
)
71 print (concat
["size of a is ", Int.toString (MLton
.size a
), "\n",
72 case Array
.sub (a
, 1) of
75 concat
["(", Int.toString a
, ", ", Int.toString b
, ")"],
79 val () = MLton
.share a
82 (* non
-sharing of vectors
*)
84 val v1
= Vector.fromList
[A
, B
, A
, B
, A
, B
, A
, B
, A
, B
, A
, B
]
85 val v2
= Vector.fromList
[A
, B
, A
, B
, A
, B
, A
, B
, A
, B
, A
, A
]
87 val a
= Array
.tabulate (4, fn i
=>
92 val () = MLton
.share a
95 if Array
.sub (a
, 2) = Array
.sub (a
, 3)
99 (* sharing of vectors
*)
101 Array
.tabulate (10, fn i
=>
104 else concat
["abc", "def"])
106 fun p () = print (concat
["size is ", Int.toString (MLton
.size a
), "\n"])
110 val () = MLton
.share a
114 val s0
= Array
.sub (a
, 0)
116 val s1
= Array
.sub (a
, 1)
118 val () = print (concat
[s0
, " ", s1
, "\n"])
120 (* sharing of vectors
in a tuple
*)
122 val t
= ("abcdef", concat
["abc", "def"])
124 fun p () = print (concat
["size is ", Int.toString (MLton
.size t
), "\n"])
128 val () = MLton
.share t
134 val () = print (concat
[s1
, " ", s2
, "\n"])
136 (* non
-sharing of similar looking strings
of different lengths
. *)
138 Array
.tabulate (10, fn i
=>
141 else concat
["a", "\000"])
143 val () = MLton
.share a
145 val s0
= Array
.sub (a
, 0)
146 val s1
= Array
.sub (a
, 1)
149 print (concat
[Int.toString (size s0
), " ",
150 Int.toString (size s1
), "\n"])