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

Issue: LISP-SYMBOL-REDEFINITION (Version 3)



    Date: 7 Oct 88 19:04 PDT
    From: masinter.pa@Xerox.COM

    David was right; version 2 was full of typos. The original problem
    description -- about an incident where a beginning user redefined
    MAKE-LIST -- is not in fact really addressed by this issue, since we
    haven't required implementations to signal an error (and don't want
    to.)

LISP-SYMBOL-REDEFINITION:DISALLOW looks okay.  I'm not concerned about
the original problem description -- a good programming environment for
beginning users would keep them from redefining MAKE-LIST
unintentionally, and a bad programming environment for beginning users
would not, but they both implement Common Lisp the language as amended
by this proposal.  So actually I think the original problem description
really is addressed by this issue, it's just not eliminated by it.

    Clarify that, as implied by CLtL p. 69, it is an error to rebind
    any symbol in CL defined as a constant.

Does "rebind" mean as with LET, or as with SETQ, or as with MAKUNBOUND?
I think you mean all three, it would be better to be more explicit.

You also need to cover redefining type-specifiers with DEFTYPE, DEFSTRUCT,
or DEFCLASS, and redefining SETF macros or functions with DEFSETF or
DEFINE-SETF-METHOD (or with DEFUN or equivalent when the cleanup
proposal for that goes through, sorry its name escapes me at the moment,
maybe setf-function-vs-macro).

On the other hand, there is a major gap between what this proposal says
and what KMP wanted, and I think KMP was right.  This proposal doesn't
forbid users from redefining things that -aren't- already defined, but
are in the Lisp package.  For example, it doesn't forbid doing

  (proclaim '(special type))

[I am not making this up] which can cause other programs to fail by
making what should have been a lexical binding turn into a special
binding.