[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Globals vs. Locals
- From: Uli Kusterer <witness.of.teachtext@...>
- Date: Fri, 5 Aug 2005 21:42:55 +0200
On Aug 5, 2005, at 18:23:18, Chris Marrin wrote:
and everything falls apart. The global 'a' got changed as a side
effect of the call to baz() and the value returned from foo is
wrong. This is very difficult to track down because I am a naive
script author and I actually don't even know that there is such a
thing as local! And even if I do, the fact that everything works
without error until I make this small change makes it very hard to
debug.
Chris,
this is exactly the case that has me worried.
It seems like the solution is to not have any default at all. You
would have a 'global' keyword to declare a global variable. That
way, the above example would give errors on the first assignment to
'a'. I would see the mistake and add a 'local' keyword and all
would be well.
Even without getting rid of the global-by-default rule, a global
keyword would help with making the code more clear. It would enable
the writing of a lint program for Lua which could warn of
undeclared globals. You could add a global keyword and get rid of
the warning. In the runtime, this keyword would be a nop. This lint
facility could even be easily added to the lua compiler as a
command line flag.
I suppose that once there was a "global" keyword in the language,
it should be fairly easy to make the compiler error or warn on
undeclared variables. Even if I'd probably want a command-line option
on the lua interpreter to turn on this warning explicitly so old code
still runs without changes.
The point to me simply is that most people will in general *want*
locals more often than globals, and thus I can understand why other
languages chose this "safer" scheme as the default.
Cheers,
-- M. Uli Kusterer
http://www.zathras.de