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

issue PROCLAIM-LEXICAL



I haven't seen an updated copy of PROCLAIM-LEXICAL. Will someone please
mail something that brings the online record up to date with the meeting?

Working from the notes Moon brought back about ammendments made:

  -- Can't dynamic bind if proclaimed lexical (passed 11 to 5)

I stand firm by my claim that this is a very, very bad idea.

Programmers have been -screaming- for the ability to locally work around
the effect of having done (PROCLAIM '(SPECIAL var)) by either doing an
UNSPECIAL or LEXICAL declaration. If we're going to provide the ability to
do:

 (PROCLAIM '(SPECIAL X))
 (DEFUN FOO (X) (DECLARE (LEXICAL X)) (+ X 3))
 (DEFUN BAR () (+ X 3))

then we should similarly provide the ability to do:

 (PROCLAIM '(LEXICAL X))
 (DEFUN FOO (X) (+ X 3))
 (DEFUN BAR () (DECLARE (SPECIAL X)) (+ X 3))

The situations are isomorphic. They provide identical functionality. The
only question is one of notation. No power is gained by prohibiting 
SPECIAL declarations of things proclaimed LEXICAL -- only frustration.

You force users to learn a complicated set of rules that buy them little
or nothing. In practice, the need to SPECIAL bind something which is
proclaimed LEXICAL probably almost never comes up, but when it does, it
should be permitted because there is no good reason not to permit it.

  -- Referencing a free variable that is neither proclaimed nor declared
     LEXICAL nor SPECIAL has undefined results (not voted)

This is fine.

  -- A free lexical declaration of a variable with no lexically
    visible binding is an error; use PROCLAIM (not voted)

This is also utter nonsense. There is no similar restriction on SPECIAL,
and it is occassionally useful. Also, there is a clear meaning. It means
you want to capture the global. Why should people assume this is a mistake.
I'm one of the people who is asking for this feature and the -reason-
I am asking for it is so I -can- capture the global. I want to be able
to capture the global. I want to be able to know that the special binding
is not in the way.

If we make a lot of doofy little special case rules about when you can
and cannot use LEXICAL and SPECIAL that are (a) unmotivated and  (b)
gratuitously different for SPECIAL and LEXICAL for reasons which are
not clearly technically motivated, then we are making a big mistake that
will just complicate the language.

We cannot afford to let this issue fall off the end of the earth because
it addresses important user needs.

We cannot afford to make the language semantics overly complicated because
someone is afraid that a programmer might not mean what he wrote, even when
it has a clear meaning and a useful purpose.

           Returned to committee

I hope the committee will think seriously about disregarding some of the
full committee suggestions and will spend its time instead better justifying
the position which was originally presented.

I'll probably also reply later to Sandra's message, with which I disagree
on a number of major points, but I don't have time right now.