Yes. So to be clearer, Gambit’s runtime system keeps a weak reference to each will created with make-will. The weak reference is severed when the will’s action procedure is executed, making the will unreachable.
This
allows the will object itself to be reclaimed after the action procedure
is
executed.
Clearer indeed!
Just for the benefit of anyone following this (i.e. this is not a question), I inferred this in the gsi REPL: the weak reference to the will seems to be severed even if the action procedure has made the object reachable again (e.g. by setting a global variable to it). Now, even if you keep a strong reference to the will, its action procedure *won't* execute when the object becomes weakly reachable again.
(define o (cons 'o 'o)) (define w (make-will o (lambda (x) (println "saving o") (set! o x)))) (set! o #f) (##gc)
saving o
(set! o #f) (##gc) w
#<will #3>