lua-users home
lua-l archive

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


On Tue, Jun 15, 2010 at 11:29 AM, GrayFace <sergroj@mail.ru> wrote:
> ...I'd like to ask what are the benefits of _ENV?

In summary: The environment table is no longer a global variable (_G)
nor a special variable attached to each function and accessed with
special functions (getfenv/setfenv) that also have special privileges
to reach into the call stack.  Rather, it is a lexical variable (a
"local _ENV") accessed just like any other lexical variable.  Scoping
of environments between nested functions is now determined statically
by simple lexical scoping rules rather than at run-time, thereby
simplifying static analysis.  The concept of globals is also
eliminated from VM, so GETGLOBAL/SETGLOBAL opcodes are replaced with
more general GETTABUP/SETTABUP opcodes, which are similar to
GETTABLE/SETTABLE but accept upvalue indices and apply not just to
environments.