[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Globals in 5.0 Alpha
- From: John Belmonte <jvb@...>
- Date: Fri, 30 Aug 2002 02:07:22 +0900
Edgar Toernig wrote:
Powerful it may be, but with the complexity I dare to disagree ;-)
It's even more obscure than the previous global statement *g*
I don't agree that it's obscure. Anyway, now that Lua has banished tag
methods, inspired from your Sol work, we have room for a little new
complexity :-). Especially when it's useful.
1) You no longer have one "global" table but a lot of them. The
term "global" becomes a little bit strange.
It's not so bad. Instead of thinking of "global" to mean the outermost
scope or a specific table, I think of it to mean the way I access the
variable. In other words, global accesses are those to undeclared
variables, and I may want to map such accesses to a certain table. If
you insist that "global" must mean the very outer scope, why not also
say that "local" should mean only the innermost scope?
2) The global-table is attached to Lua functions. You are no longer
able to switch to another "global" table. You have to explicitely
change each and every function (hard/impossible to do).
I don't quite follow the problem here. It's easy to group functions
that you would like to share scope within a function or chunk.
3) It introduces a hard to track dynamic binding. It's impossible to
tell which object is accessed by an identifier. The binding is
done dynamically at a later point (even while a function is active).
It looks like a feature to me. Writing a chunk with exported variables
as globals and then being able to control binding according to the
application is very powerful. The old global statement was too static--
a problem, especially since Lua lack's a macro system.
IMHO, even
local val
mod_table = {}
function mod_table.foo(x) val=x end
function mod_table.bar(x) print(val) end
is easier to understand than these global table tricks.
What you're not showing is bar calling foo (in other words, code with
countless references to mod_table). You're neglecting that to prevent
global name clashes and get the best performance, you have to make
mod_table local and return it to the caller.
Anway, nothing prevents you from continuing to write in that style.
-John
--
http:// i . /