Ordinary symbols are special in that they are the only values created by Scheme code on runtime that are not garbage collected currently.

(The other ones would be any compiled code you load and ___PERM objects you allocate in C.)

Compare:

> (define t (make-table weak-keys: #t weak-values: #t))
> (table-set! t (string->symbol "abc") (string->symbol "def"))
> (table-set! t "ghi" "jkl")
> (table-set! t (make-uninterned-symbol "mno") (make-uninterned-symbol "pqr"))
> (##gc) (##gc) (##gc)
> > > (table->list t)
((abc . def))


2013/9/25 Adrien Piérard <pierarda@iro.umontreal.ca>
Hum, I might have completely misunderstood many things, from what you
wrote to how symbols work, but what if I have a symbol stored as a
weak reference in a table, and it gets garbage collected. If I later
re-read this symbol from the network, then I won't find it in the
table, will I? But wasn't I guaranteed I'd find it  *because* it's a
symbol and thus the table should still be containing an element EQ to
the one I just got from the network?

P!