[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CLOS defining macros & compilation
- To: cl-compiler@SAIL.STANFORD.EDU, common-lisp-object-system@SAIL.STANFORD.EDU
- Subject: CLOS defining macros & compilation
- From: sandra%defun@cs.utah.edu (Sandra J Loosemore)
- Date: Thu, 23 Feb 89 14:13:57 MST
This is an attempt to summarize the problems that have been raised so
far about the compilation semantics of the various CLOS defining
macros.
The descriptions of the expansions of the DEFCLASS, DEFMETHOD, and
DEFGENERIC macros in the meta-object protocol document specify that
subforms be evaluated at compile-time in the lexical environment in
which the defining macro appears, which is not fully defined until
run-time. The obvious solution to this problem is to say that the
compile-time evaluation happens only when the defining macro call
appears at top-level, the same as for all the other defining macros.
However, some people have questioned whether compile-time evaluation
is even necessary at all, especially in the case of DEFMETHOD and
DEFGENERIC.
The meta-object protocol does not say anything about whether
DEFINE-METHOD-COMBINATION has compile-time side-effects.
The CLOS spec assumes that compile-time class and method definitions
are made available through a remote lexical environment object. The
full implications of this are not well-understood and we have little
or no experience with actual implementation.
The descriptions of the expansions of the DEFCLASS, DEFMETHOD, and
DEFGENERIC macros in the meta-object protocol document assume that
lexical environment objects received with &ENVIRONMENT have indefinite
extent. Some people have argued that it ought to be legal for
environment objects to have only dynamic extent (issue
MACRO-ENVIRONMENT-EXTENT). There have also been concerns expressed
about how COMPILE-FILE should "clean up" the class structure to remove
definitions made during compilation.
Now, as to what I suggest we do about all of this.
I believe that there are enough serious problems with the compilation
semantics presented in the meta-object protocol document distributed
before the January meeting that it would be a mistake to try to
standardize that behavior. It does not appear that any alternate
proposal is forthcoming from the CLOS committee in time for us to make
the March 15th deadline (that's less than 3 weeks away, folks).
To me it appears that the only practical solution for the near term is
a minimal proposal that leaves many aspects of the behavior explicitly
vague. (Basically, that DEFCLASS makes the class name recognizable as
a valid type name in subsequent declarations, but leaving unspecified
whether or not real class, method, etc. objects are fully defined at
compile-time.) It may well happen that at some point the MOP
compilation semantics will be fixed and the behavior can be specified
more tightly, but I don't see any sign of that happening within the
next couple of weeks.
I think that one of the things we must leave explicitly vague is the
use of remote lexical environment objects to contain compile-time
definitions. Proposal COMPILE-TIME-HANDLING-OF-TOP-LEVEL-FORMS allows
implementations considerable freedom in how other kinds of definitions
(DEFMACRO, DEFSTRUCT, etc.) are made available to the compiler; it
says only that such definitions *are* made available. Why not do the
same thing for the CLOS defining macros? I certainly don't want to
discourage people from continuing to pursue the issues involved, but
the work seems too experimental yet at the stage to fall into the
domain of a standards committee.
-Sandra
-------