Date: Thursday, 1 May 1986 22:53-EDT
From: Kent M Pitman <KMP at SCRC-STONY-BROOK.ARPA>
To: Common-Lisp at SU-AI.ARPA
Re: Problems with packages
...
What happened was that I hit a bad timing window and it tried to resolve
the `FOO' package at the instant the package was created but before the
special stuff (like shadowing, importing, etc.) had been done. ...
Sounds like an environment issue to me :-)
While I'm on the subject of packages, I have a few other gripes to
air...
I'm really bothered that I have to say symbols as arguments to
shadow. The 3600 implementation allows me to use strings, which CL
doesn't define. CL should -require- strings as arguments to this
function and should not allow symbols. Giving symbols as
arguments to this function forces things to get created wrong and
then hopes that things will get cleaned up correctly afterward.
This reduces the ability to error-check if the symbol to be
shadowed had already been interned for some reason other than the
call to shadow.
I don't quite follow what you are saying about "things getting created
wrong." If the call to shadow is read in the package which them
symbols are to be shadowed in, then:
1] The symbols get created as internal symbols in the package, in
which case shadow does nothing but update the shadowing symbols
list.
2] The symbols were already directly present in the package, in which
case both reading and shadowing do nothing but update the
shadowing symbols list.
3] The symbols are inherited from somewhere, in which case the
"wrong" symbol is read, but nothing is "created wrong", since the
symbol already existed.
It is a bit odd that SHADOW takes a list of symbols and then just uses
the names, but it doesn't have any bad side-effects that I can see. I
would guess that consistency was the motivation for using symbols
everywhere. Using symbols also lets those of us who dislike uppercase
type the names of the arguments in lowercase.
Rob