OCaml toplevel, l l, ( ) . , , , , .
$ rlwrap ocaml
OCaml version 4.00.1
# let l = [ 1 ] ;;
val l : int list = [1]
# let w = Weak.create 1 ;;
val w : '_a Weak.t = <abstr>
# Weak.set w 0 (Some l) ;;
- : unit = ()
# Gc.full_major () ;;
- : unit = ()
# Weak.check w 0 ;;
- : bool = true
#
true , l .
# let l = [ 2 ] ;;
val l : int list = [2]
# Weak.check w 0 ;;
- : bool = true
# Gc.full_major () ;;
- : unit = ()
# Weak.check w 0 ;;
- : bool = true
#
, "" ( , GC).
l:
$ cat t.ml
let l = [ 1 ] ;;
let w = Weak.create 1 ;;
Weak.set w 0 (Some l) ;;
Gc.full_major () ;;
Printf.printf "%B\n" (Weak.check w 0) ;;
let l = [ 2 ] ;;
Printf.printf "%B\n" (Weak.check w 0) ;;
Gc.full_major () ;;
Printf.printf "%B\n" (Weak.check w 0) ;;
$ ocamlc t.ml
$ ./a.out
true
true
true
$ ocamlopt t.ml
$ ./a.out
true
true
true
GC "", , , :
let g () = Gc.full_major ()
let f () = let l = [ 1 ] in (* do something with l; *) g(); 1
, g ( f), l ( ) . , - . GC, , , f .