Issue: LISP-SYMBOL-REDEFINITION-AGAINReference: X3J13/92-102 (dpANS 12.24)
Section 11.1.2.1.1 Constraints on the COMMON-LISP Package
for Conforming Implementations (p.11-5)
Section 11.1.2.1.2 Constraints on the COMMON-LISP Package
for Conforming Programs (p.11-5..6)
Section 11.1.2.1.2.1 Some Exceptions to Constraints on the
COMMON-LISP Package for Conforming Programs (p.11-6)
X3J13/90-419 LISP-SYMBOL-REDEFINITION (Version 8)
X3J13/92-1412 Barry Margolin comment #12
X3J13/92-2517 Kim Barrett comment #17
"The Art of the Metaobject Protocol", Section 5.3.1, p.142
Category: CHANGE/CLARIFICATION
Edit History: Version 1, 12/31/92, Kim Barrett
Status: Proposal MORE-FIXES passed (10+1)-0 on letter ballot 93-302.
Problem Description:
The set of restrictions on conforming programs specified in 11.1.2.1.2 is
incomplete. Some constraints added by X3J13/90-419 were not included, and
there are some additional restrictions that were missed entirely.
Proposal (LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES):
1. Make the following changes to existing items in 11.1.2.1.2.
a. Add "undefining" to item 2, prohibiting the removal of function
definitions.
b. Add "undefining" to item 3, prohibiting the removal of macro and
compiler-macro definitions.
2. Add the following items to 11.1.2.1.2.
a. Defining a \term{setf expander} for it (via \funref{defsetf} or
\funref{define-setf-method}).
b. Defining, undefining, or binding its \term{setf function name}.
c. Defining it as a \term{method combination} type (via
\funref{define-method-combination}).
d. Using it as the class-name argument to \funref{setf} of
\funref{find-class}.
e. Binding it as a \term{catch tag}.
f. Binding it as a \term{restart} \term{name}.
g. Defining a \term{method} for a \term{standardized} \term{generic
function} which is \term{applicable} when all of the \term{arguments}
are \term{direct instances} of \term{standardized} \term{classes}.
3. Add the following as an additional paragraph for 11.1.2.1.2.1.
If an \term{external symbol} of \thepackage{common-lisp} is not defined as
a \term{standardized} \term{function}, \term{macro}, or \term{special
operator}, it is allowed to lexically \term{bind} its \term{setf function
name} as a \term{function}, and to declare the \declref{ftype} of that
\term{binding}.
4. Add the following entry to the glossary.
\gentry{setf function name} \Noun\ (of a \term{symbol})
the \term{list} \f{(setf \term{symbol})}.
Editorial Impact:
Several small additions described above.
Rationale:
Items 1, 2a through 2d, and 3 were in LISP-SYMBOL-REDEFINITION (v8) but were
not included in the draft. Items 2a, 2b, and 3 also respond to Margolin's
comment.
Item 4 defines terminology for the other items to use.
Items 2e and 2f are cases that were previously overlooked.
Item 2g was also previously overlooked. It is a recasting of the first
bullet on p.143 of AMOP. It responds to both Margolin's and Barrett's
comments.
Discussion:
It's unfortunate that section 11.1.2.1 doesn't contain any rationale for the
specified restrictions, but changing that is beyond the scope of this proposal.