[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bawden's Alternate Proposal
Date: 23 Jul 86 00:44 PDT
Subject: Re: Bawden's Alternate Proposal
In-Reply-To: Alan Bawden <ALAN@AI.AI.MIT.EDU>'s message of Wed, 23 Jul
86 01:20:16 EDT
One source of problems with "special" declarations is that they talk
about two different things: references & bindings. Since we're
considering radical changes, lets consider separating out the two uses:
(DECLARE (SPECIAL var1 var2 ...))
only affect the *binding* of var1 and var2. Which binding? Only the one
that they are lexically apparent in. SPECIAL declarations can only occur
in declarations in LAMBDA and LET and are only meaningful for the
variables that are actually bound there.
How do you tell if a *reference* is special or lexical? A reference is
lexical if the variable is lexically apparent, and special if it isn't.
If you want, we can add another declaration (SPECIAL-REFERENCE var1 var2
...) which is like (IGNORE var1 ...) in that its only use is to turn off
compiler warnings. In this case, if you declare something as
USED-FREELY, the compiler won't warn about special references to
variables that aren't PROCLAIMed special.
(Interlisp has this separation: special declarations are done with
SPECVARS, while reference declarations, just there to turn off warnings,
are done with USEDFREE.)
I contend (as I did in my proposal) that not just SPECIAL, but ALL
decl-specs (exluding optimize and declaration) "talk about two
different things: references & bindings." Do you want to double the
number of decl-specs, one for bindings and one for references? I
Under my proposal, it is obvious from context whether a declaration is
talking about a binding or just about references: If a declaration
about NAME appears in the body of a form that is binding NAME, then
the declaration is talking about the binding, otherwise it is talking
about references. Simple.