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

Issue: PROCLAIM-LEXICAL (Version 4)



    I'm still not very happy with this, if only because the proposed
    solution is not really motivated well by the problem described.

I agree that the problem description needs work.  We started discussing
this set of issues again because someone was grousing about spurious
warnings, but it quickly became apparent that this was just a symptom of
a badly snarled system for declaraing variable types.  The proposal
tries to rationalize this mess.  Probably the right move is to take some
of the stuff from the "benefits" section, negate it, and put the result
into the problem section.

I support the substance of thsi proposal now.  I am still uneasy about
the statement that it "is an error" to change a variable's proclaimed
binding-type.  I'd be happy to see implementations issue a warning in
this case, but I'd also like to see a guarantee that the new
proclamation will take effect, except perhaps in the case of GLOBAL or
CONSTANT proclamations that have already had an irreversible effect on
compiled code.  Otherwise, if you accidentally issue the wrong
proclamation, you've got no choice but to nuke the Lisp.

I suppose this means that KMP and I will have to have another fight
about whether it is OK to issue a warning in a case that neither "is an
error" nor "signals an error".  We're probably never going to agree on
what warnings are for, so let me state in advance that I think I'm
right, but I would settle for a formula that says re-proclaiming is an
error, but implementors are ENCOURAGED to handle it in a way that lets
the re-proclamation take effect.

By the way, last time around I argued pretty strongly that
implementations should be forced to accept SETQ of unproclaimed
variables, at least in the interpreter, so that the time honoered
practice of saying (SETQ FOO *) to the read-eval-print loop would not be
disrupted. I'm willing to yield on this now.  I've decided that I can
define a macro that will turn (STUFF FOO *) into the proper
proclaim/setq pair.  But I do want to be able to undo that proclamation
later without nuking hte Lisp.

-- Scott