#

## Issue LISP-SYMBOL-REDEFINITION-AGAIN Writeup

    Issue:        LISP-SYMBOL-REDEFINITION-AGAIN
    Reference:    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.

Copyright 1996-2005, LispWorks Ltd. All rights reserved.