Weak pointers

Daniel de Rauglaudre (ddr@peray.inria.fr)
Sun, 30 Mar 1997 19:13:46 +0200 (MET DST)

From: Daniel de Rauglaudre <ddr@peray.inria.fr>
Message-Id: <199703301713.AA04100@peray.inria.fr>
Subject: Weak pointers
To: caml-list@inria.fr
Date: Sun, 30 Mar 1997 19:13:46 +0200 (MET DST)

I would like to use weak pointers in my code, and I wrote a little test
to check its behavior... It does not work. Why? Maybe I did not
understand them...

$ cat >foo.ml
let print_weak w i =
begin match Weak.get w i with
Some _ -> Printf.printf "Some ..."
| None -> Printf.printf "None"
end;
Printf.printf "\n";
flush stdout
;;

let w = Weak.create 1;;
let r = ref "hello";;

Weak.set w 0 (Some !r);;
print_weak w 0;;

Gc.full_major ();;
print_weak w 0;;

r := "world";;
print_weak w 0;;

Gc.full_major ();;
print_weak w 0;;

$ ocamlc -v
The Objective Caml compiler, version 1.05-2
Standard library directory: ...

$ ocamlc foo.ml

$ ./a.out
Some ...
Some ...
Some ...
Some ...

I do not understand why the very last print is "Some ..." and not "None".

--------------------------------------------------------------------------
Daniel de RAUGLAUDRE

Projet Cristal - INRIA Rocquencourt
Tel: +33 (01) 39 63 53 51
Email: daniel.de_rauglaudre@inria.fr
Web: http://pauillac.inria.fr/~ddr/
--------------------------------------------------------------------------