[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: globals
- From: "John Belmonte" <jvb@...>
- Date: Mon, 4 Jun 2001 19:45:55 +0900
Reuben Thomas wrote:
> But there's another nicer solution to this: lexical scoping with nested
> functions. This is sort of provided in Lua by upvalues, but because
> are frozen they don't work properly. It'd be better if Lua had proper
> closures; then upvalues needn't be frozen, and we could use the full power
> of lexical scoping.
> It'd be nice to see the current proposals laid out thusly: first, what
> local-by-default syntax look like
These are conflicting goals. Python, when proper lexical scoping was added
to the language, couldn't support rebinding of outer-scoped variables due to
its lack of variable declarations (that is, local-by-default semantics).
>From the Statically Nested Scopes PEP
The only kind of declaration is the global statement, which allows
programs to be written using mutable global variables. As a
consequence, it is not possible to rebind a name defined in an
enclosing scope. An assignment operation can only bind a name in
the current scope or in the global scope. The lack of
declarations and the inability to rebind names in enclosing scopes
are unusual for lexically scoped languages; there is typically a
mechanism to create name bindings (e.g. lambda and let in Scheme)
and a mechanism to change the bindings (set! in Scheme).
As a solution to the accidental-assignment-to-global (the only problem I'm
interested in solving), I'm against local-by-default because I want to see
proper lexical scoping with rebinding in Lua someday, and because as a C
programmer I'm comfortable with declaring local variables.