For those who were there during my demo of "wills" at the MSLUG
meeting... the strange behaviour with collection of bignums has
nothing to do with the reciprocal-cache (indeed it is correctly
managed with a table with weak references), nor is it related to
bignums. It is really a byproduct of the recent result table which
remembers the last 3 results of the REPL, so that they can be accessed
with the forms # (last result), ## (penultimate result) and ###. In
the example below the bignum 1000000000000000000000000000000 which was
reachable through variable "a" is still reachable after the (set! a
#f) because it is still in the recent result table. A few dummy
expressions have to be entered so that bignum is dropped from the table.
I remember feeling uncomfortable when introducing the REPL recent
result history because of the temporary space leak. Now I know why...
Marc
Gambit v4.2.8
> (define a (expt 10 30))
> (make-will a (lambda (x) (pp (list 'died: x))))
#<will #2>
> a
1000000000000000000000000000000
> (set! a #f)
> (##gc)
> (##gc)
> 111
111
> 222
222
> 333
333
> (##gc)
(died: 1000000000000000000000000000000)