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

Re: issue PROCLAIM-LEXICAL



> This topic has had enormous amounts of discussion a long time ago.
> Perhaps you weren't party to the discussions back then, by my objection
> -- shared by several others (e.g. Julian Padgett?)  --  is  *** not
> at all *** on the performance implications. 

Some of the objections at he Hawaii meeting were definitely about
the performance implications, and also the question of whether the
"bit" needed for the flag can actually be found.  (At least one person
said they didn't have a free bit.)

I am having difficulty understanding the "conceptual" argument.
It seems that you end up with local lexical being able to override
proclaimed special but not the other way around.  The LG proposal is
at least symmetric.

And, as I tried to say in an earlier message, the reasonable uses
of GLOBAL are subsumed by LEXICAL.

> Now, QLISP is a deep bound implementation, and thus already has these
> algorithms working (patterened, not unsurprisingly, after some of
> the Interlisp work).  But we strongly feel that there should not be
> two conceptually different "top level" environments -- a global-lexical
> one and a global-dynamic one.  The counter argument that these would
> be implemented as exactly the same set of value cells is not relevant.

Conceptually, there is one global environment in the LG proposal.
That's how the proposal's stated, at least, and I do think you can
coherently think of it that way.

> Our feeling (if indeed I speak for some of the other objectors) is that 
> local lexical overrides of global proclamations are acceptable;  the 
> override has only tightly constrained lexical scope.  Thus a local
> "lexical" declaration for a variable proclaimed to be SPECIAL is
> not troublesome.  But an override of either a SPECIAL or a GLOBAL 
                                                  |
Do you mean LEXICAL here -------------------------| ?

You just said a lexical declaration for a variable proclaimed special
was OK; so if you don't mean LEXICAL, there's a contradiction.

> proclamation that has indefinite scope (yes "scope", not extent) is a 
> terribly bad and confusing idea.   A special declaration or binding of 
> a variable globally proclaimed LEXICAL (or, GLOBAL as in QLISP's case) 
> would be such a violation.

Case 1: (let ((a 10))
	  (let ((a 20))
	    (declare (special a)) ;override lexical
	    ...)
	  ...)

Case 2: (define-lexical a 10)
	(let ((a 20))
	  (declare (special a))
	  ...)

Why are these two cases different?  Both set up a new scope in which
the variable A is special instead of lexical.  Both do it inside
another scope where the variable is lexical.

I think these two cases should be analogous.  The only reason that
they should not be (that I can see) is that PROCLAIM is somehow
"more magic" than placing the corresponding declaration on every
binding.  And if it is "more magic", I think it should not be.

-- Jeff