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


I'm confused about the use of metaclass STRUCTURE-CLASS; a cleanup
proposal to clarify this is needed.  In X3J13 correspondence, I've seen
mentions of using DEFCLASS instead of DEFSTRUCT to create structures,
but document 88-002R does not say that you can do that.  On the other
hand, it doesn't say that you can't either.  Basically the question is
is legal and, if so, just what it means.

What the document _does_ say on page 1-15:

  "Calling MAKE-INSTANCE to create an instance of a built-in class
  signals an error.  Calling SLOT-VALUE on an instance of a built-in
  class signals an error."

No such error is specified for STRUCTURE-CLASS; is that intended to
imply that SLOT-VALUE of a structure _is_ legal?  Page 2-80 does not
shed any light on this.  It isn't until page 3-107 of document 89-003
that we see that, yes, it is supposed to be supported.

Also on page 1-15:

  "Calling MAKE-INSTANCE to create an instance of STRUCTURE-CLASS
  signals an error."

I had always thought that this meant that MAKE-INSTANCE couldn't be used
to create an instance of a structure type, but looking at it again now,
it looks like it just means that you can't create the structure type by
(MAKE-INSTANCE 'STRUCTURE-CLASS); perhaps a clarification of the wording
would be in order.  But since DEFCLASS uses ENSURE-CLASS which uses
MAKE-INSTANCE, does that imply that DEFCLASS can't be used either?

Page 3-35 of 89-003 does specify an ALLOCATE-INSTANCE method for
STRUCTURE-CLASS, which would imply that MAKE-INSTANCE _can_ be used to
create instances of structure types.

But if chapter 3 is not going to make it into the standard, then it is
even more important to clarify this in chapters 1 and 2  -- is the use
of DEFCLASS, MAKE-INSTANCE, SLOT-VALUE etc. for structures

  * Required to be supported?   or

  * Required to signal an error?  or

  * A permissible extension?

Also, if (DEFSTRUCT ... (:METACLASS STRUCTURE-CLASS)) is permitted, what
limitations or extensions apply to the slot and class options?  Does it
create a MAKE-... function?  Does it accept a :CONSTRUCTOR class option?
What kind of accessors does it create -- inline functions like
DEFSTRUCT, or generic function methods like STANDARD-CLASS?  
Is :ALLOCATION :CLASS permitted?