David, I believe you are seeing the difference between modules and the REPL. At the REPL, each expression is compiled, run, and discarded. This yields the behavior you expect. But a "#lang" form produces a module, which is compiled and kept for the rest of the session. Thus, even after garbage collection, the compiled form of the first term still exists:
(define b (make-weak-box 'not-used)) Thus there is a reference to the symbol not-used, and it is not garbage collected. Carl Eastlund On Wed, Mar 16, 2011 at 5:09 PM, David Vanderson <[email protected]> wrote: > I'm seeing a difference between when the value in a weak box is collected. > When I run the following interactively, the value is collected like I > expect. But it is not collected when running in a script, or in DrRacket. > This is v5.1 on Ubuntu x64, compiled from source. > > Can someone explain the difference? > > ~$ racket > Welcome to Racket v5.1. >> (define b (make-weak-box 'not-used)) >> (weak-box-value b) > 'not-used >> (collect-garbage) >> (weak-box-value b) > #f > > > ~$ cat weak-box.rkt > #lang racket > > (define b (make-weak-box 'not-used)) > (weak-box-value b) > (collect-garbage) > (weak-box-value b) > > ~$ racket weak-box.rkt > 'not-used > 'not-used > > Thanks, > Dave _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev

