[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Firs set of comments on TAOTMOP part 2



   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.