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

the lexical environment for DEFTYPE, DEFINE-SETF-METHOD and

    Date: Sunday, 11 October 1987  23:49-EDT
    From: Pavel.pa at Xerox.COM
    To:   David Bein <pyrnj!pyramid!bein at RUTGERS.EDU>
    cc:   common-lisp at sail.stanford.edu
    Re:   the lexical environment for DEFTYPE, DEFINE-SETF-METHOD and

    [...] the description of DEFMACRO that states that the body of a
    DEFMACRO is evaluated in the null lexical environment.  This restriction
    was put in with the thought that it was necessary in order for the
    compiler to be able to macroexpand forms without evaluating the
    surrounding code to create a lexical environment.

    This argument, however, is bogus, since it is the lexical environment of
    the DEFMACRO, not that of the macro-call, that is important.  If a
    DEFMACRO appears in a non-null lexical environment, the compiler is not
    obliged to notice it at all (aside from compiling it correctly).  That
    is, later forms in the same file may not depend upon that macro having
    been installed.

If I believed in your proposed semantics for DEFMACRO, then I would
buy this argument, but I don't.  It seems to me to be a bizzarre
suggestion that the semantics of an operation should depend on whether
the environment is null or not.  I think that the only reason that
anyone buys this at all is that Lisp compilers have traditionally
magically special-cased forms that "appear at top-level", whatever
that means.

I think that there is a pretty convincing argument that the whole
concept of a "top-level form" is inappropriate in a lexically scoped
Lisp.  In my proposal for Common Lisp compilation (really evaluation)
semantics, I define things in a way that is consistent with general
usage, but makes no use of the concept "top level".