[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Firs set of comments on TAOTMOP part 2
- To: Cyphers@JASPER.SCRC.Symbolics.COM
- Subject: Re: Firs set of comments on TAOTMOP part 2
- From: Gregor Kiczales <gregor@parc.xerox.com>
- Date: Sun, 4 Nov 1990 16:48:13 PST
- Cc: mop@arisia.Xerox.COM
- Fake-sender: gregor@parc.xerox.com
- In-reply-to: "Scott Cyphers's message of Wed, 31 Oct 1990 13:30:00 PST <19901031213030.8.CYPHERS@SEAR.SCRC.Symbolics.COM>"
Date: Wed, 31 Oct 1990 13:30:00 PST
From: Scott Cyphers <Cyphers@JASPER.SCRC.Symbolics.COM>
3-13: Last bullet
Portable metaclasses cannot be redefined.
Why not? I can see why user code shouldn't go around redefining the
standard metaclasses for the same reason they shouldn't be allowed to
redefine CAR, but I can't think of any reason to disallow it for
user-defined metaclasses. I think the CLOS implementation should just
make this kind of thing happen automatically via inheritance.
For the same reason portable metaobject classes and applicable methods
must all be defined before any instances are created. To simplify the
standard sorts of optimization tricks based on advance detection of the
possible range of meta-level incursions.
An implementation, such as yours, that wants to allow this sort of
redefinition is of course free to do so. It just seems to much to
ask all implementations to handle it.
3-17: I can not accept the section for parsing of DEFCLASS, since
it prohibits compile-time checking for spelling mistakes in option
names.
I don't understand this. It seems to me the current scheme lets you
do compile-time checking, in one of two ways:
Simple, minimally adequate way. When no :metaclass option is specified,
you know the class metaobject class is STANDARD-CLASS and you can do
simple textual checking of the options. When a :metaclass option is
specified you can warn about options you don't recognize, but that might
get annoying.
Slightly less complicated, but works completely way. Instantiate the
class metaobjects "in the compile time environment." This means all the
options will end up getting processed (as initialization arguments to
the class and direct slot definition metaobjects). Any illegal options
will become illegal initialization arguments and an error will be
signalled. Because that error is in fact siganlled by a pice of
implementation code you should be able to make this as user-friendly as
you like.