[comp.lang.lisp] Garbage Collecting symbols

ttran@opus.cdc.com (Tuyen Tran ) (03/17/89)

If the only path from the root to a symbol is through the symbol's
package, and the symbol's value/function/plist cells are empty, is it 
safe to remove the symbol?

Some LISPs use the existance of a symbol on a package to shadow 
inherited symbols of the same name.  It seems to me that removing
empty symbols in some cases would affect the behavior of the
system.

Take the CommonLisp package scheme for example, under what conditions,
EXACTLY, can symbols be removed?

-T. Tran

ttran@opus.cdc.com

hoey@ai.etl.army.mil (Dan Hoey) (03/18/89)

In article <11867@shamash.cdc.com> ttran@opus.cdc.com (Tuyen Tran ) writes:
>If the only path from the root to a symbol is through the symbol's
>package, and the symbol's value/function/plist cells are empty, is it 
>safe to remove the symbol?

It's not ``safe'' in the sense of being invisible to the user, who may be using
the package as a way of storing a set of strings that are later to be retrieved
with DO-SYMBOLS.  That is why all lisps that I know of that GC interned symbols
do so under control of a user-selectable switch.  Maclisp called its switch
something like GCTWA, for ``GC truly worthless atoms''.  Back in those days
they often called symbols ``atoms.''

>Some LISPs use the existance of a symbol on a package to shadow 
>inherited symbols of the same name.  It seems to me that removing
>empty symbols in some cases would affect the behavior of the
>system.

Your definition of these symbols as having their only path ``through the
package'' leaves something to be desired.  All definitions I've heard of that
deal with TWA's specify that there be no pointer to them other than that
implicit in the symbol's accessibility through DO-SYMBOLS or equivalent.  Thus
the symbol's presence on the PACKAGE-SHADOWING-SYMBOLS list of the package
would preserve it from collection.

If you explicitly UNINTERN a shadowing symbol, then Common Lisp removes it from
the shadowing-symbols list.  Thus it is impossible to determine whether the
system uses the presence of the symbol or its membership in the shadowing-
symbols list to perform shadowing.

Dan