lua-users home
lua-l archive

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


Peter Cawley wrote:
On Mon, Jul 6, 2009 at 9:20 PM, Rob Kendrick<lua-l@nun.org.uk> wrote:
I just had a thought; why are function environments not implemented via
a field in a metatable?  For example;
> Firstly, environment tables are per-function, whereas all functions
> share a single metatable, so function environments could not be set
> via metatable. Secondly, separating the environment from the metatable
> allows for one to be per-instance and one to be per-class.

It may be that OP meant also to ask "Why not a per-instance metatable for functions?" If so, I'd recommend a fun journey through these threads:

  http://lua-users.org/lists/lua-l/2009-05/msg00298.html
  http://lua-users.org/lists/lua-l/2009-03/msg00479.html

IMHO, the short reply to the original question is "performance". Requiring the attachment of a metatable for __env would levy the overhead of a table lookup, possibly a chain of them due to __index, for each function call.

I like the general direction you're going - unifying and generalizing - but it seems that separate environments for functions are too useful for such a price to be paid per call.

Doug


______________________________________________________________________________________
The information contained in this email transmission may contain proprietary and business sensitive information. If you are not the intended recipient, you are hereby notified that any review, dissemination, distribution or duplication of this communication is strictly prohibited. Unauthorized interception of this e-mail is a violation of law. If you are not the intended recipient, please contact the sender by reply email and immediately destroy all copies of the original message.

Any technical data and/or information provided with or in this email may be subject to U.S. export controls law. Export, diversion or disclosure contrary to U.S. law is prohibited. Such technical data or information is not to be exported from the U.S. or given to any foreign person in the U.S. without prior written authorization of Elbit Systems of America and the appropriate U.S. Government agency.