[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Next Version of Lua?
- From: James Snyder <jbsnyder@...>
- Date: Wed, 10 Jun 2009 10:54:40 -0500
On Jun 10, 2009, at 5:24 AM, Luiz Henrique de Figueiredo wrote:
* VM: Add support for __overrideindex (as the meta-method's name
suggest, override a key in the table which already contains a non-nil
value with a new value, nil or otherwise)
The usual answer is to use proxies.
Proxies work well for a fair number of things, except for some types
of lazy evaluation like accessing tables in a remote Lua environment.
If one wants to do things like call functions in the remote
environment, but also be able to index values on remote tables and
have them be able to be accessed locally, it is difficult to decide
when a series of __index events should result in returning another
proxy vs returning the value on the table.
Say for example you have a handle for the remote environment,
conveniently called "handle":
handle.foo.bar(a,b,c)
It's pretty easy to know how to deal with this situation since it
includes a call, but what if that same remote table called foo has a
value on it that I want:
local_value = handle.foo
Do I make local_value a proxy or the actual value? The metatable
hooks allow for dealing with a number of operations, but what if I
just want to do somehting like:
math.cos(local_value)
It would be nice to be able to hook things maybe at the index2adr
level, or provide some way so that when the actual type is checked or
looked up that the value could be pulled down just before the operation.
Some of this functionality could come from adding a __tonumber, and
covering a few more type conversions, but this would provide a more
general lazy evaluation hook.
I assume it would also potentially slow down every lookup for data,
but perhaps there's some way to make that hit negligible?
--
James Snyder
Biomedical Engineering
Northwestern University
jbsnyder@fanplastic.org
http://fanplastic.org/key.txt
ph: (847) 448-0386
Attachment:
PGP.sig
Description: This is a digitally signed message part