lua-users home
lua-l archive

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


I don't usually "me too", but in this case I have to agree. I've had
the same feeling ever since I became involved in Lua.

On Wed, Apr 19, 2000 at 03:10:19AM -0300, John Belmonte wrote:
> 
> Recently I've been toying around with an implementation of overloaded
> functions in Lua.  I ran into an issue that must be well-known by anyone
> working on Lua extensions.  I found that at the lowest level I need to
> provide two implementations for everything: one for the global environment
> and another for tables.
> 
> Since the table data type is used so effectively to keep Lua simple and
> powerful, it made me wonder why use of tables wasn't extended as far as the
> global environment.  In other words why does a programmer implementing
> extensions have to treat the global environment as a special case?
> 
> The solution I'm thinking about is to keep current Lua semantics intact, but
> remove all the global operations (listed below) from the language.  Then add
> just one function to get a global table value, say globaltable().
> 
> 
>     global operation            table "equivalent"
>     ----------------            ------------------
>     setglobal()                 {table access syntax}
>     getglobal()                 {table access syntax}
>     rawsetglobal()              rawgettable
>     rawgetglobal()              rawsettable
>     foreachvar()                foreach
>     nextvar()                   next
>     setglobal tagmethod         settable tagmethod - roughly
>     getglobal tagmethod         gettable tagmethod - roughly
> 
> 
> By making this change the Lua language and documentation would be
> simplified, and I believe the complexity of implementing extensions would be
> reduced.
> 
> It doesn't seem there would be much of a performance hit.  Furthermore for
> backward compatibility, all the global operation functions could be
> re-implemented using the table equivalents, and the "getglobal" and
> "setglobal" tags emulated.  I'm sure that I must be overlooking something...
> what is it?
> 
> It looks possible to run through an implementation of this within Lua itself
> without changing any source code.  Before I run down that road I thought it
> would be good to entertain some criticism.
> 
> 
> -John Belmonte
> 
> 

-- 
David Jeske (N9LCA) + http://www.chat.net/~jeske/ + jeske@chat.net