On Mar 13, 2011, at 3:42 PM, David Bruant wrote:
> I personnally don't have any strong conviction on the matter (which object
> should carry the function if any). But as I wanted to get rid of a part of
> the terminology that had been used in a method name
> (http://wiki.ecmascript.org/doku.php?id=harmony:proxies#detecting_proxy_objects)
> I just thought it would be fair to mention it and propose a solution to it.
> There is no emergency though. In the proposal is written "The current
> consensus is not to provide this method as it directly breaks “transparent”
> virtualization of objects".
Right, Proxy.isTrapping is not spec'ed, and not prototype-implemented in
Firefox 4.
But the minor terminology issue remains (see Andreas's followup). Would be
great to hear from Tom Van Cutsem on this.
/be
>
> David
>
> Le 13/03/2011 21:32, Brendan Eich a écrit :
>>
>> I buy it.
>>
>> I also cringe a little at Array.isArray, and therefore at Proxy.isProxy, in
>> the pre-modules world ES5 and the proxies proposal inhabit. These seem like
>> tautological predicates, and Object.isArray is prettier and more fitting in
>> my view. But this is a tiny nit to pick. If you buy it, then Object.isProxy
>> would be the predicate.
>>
>> OTOH, with modules we would *not* put isProxy on poor old Object, and one
>> would want isProxy to be an export, along with create, createFunction,
>> Handler, etc., from the standard Proxy module. So at this point I don't
>> propose Object.isProxy.
>>
>> Whee, naming.
>>
>> /be
>>
>> On Mar 13, 2011, at 12:08 PM, David Bruant wrote:
>>
>>> Hi,
>>>
>>> I would like to discuss the terminology of the proposal and the two states
>>> of a proxy: trapping or fixed.
>>> In order to discuss, here is a little example:
>>> ---------------------------------
>>> var o = {};
>>> var p = Proxy.create( forwardingHandler(o) );
>>> p.a = 1;
>>> o.b = 2;
>>> p.c = 3;
>>> o.d = 4;
>>> /* For all x in [a,b,c,d], we have (p[x] === o[x]) and (p.hasOwnProperty(x)
>>> iff o.hasOwnProperty(x)) */
>>>
>>> Object.preventExtension(p); // The "proxy" becomes "fixed"
>>>
>>> delete o.a;
>>> delete p.b;
>>> // o is like {b:2, c:3, d:4} while p is like {a:1, c:3, d:4}
>>> // o and p have lost "synchronicity". p is an object with its own
>>> independent life.
>>> ----------------------------------
>>>
>>> After the Object.preventExtension|seal|freeze call, p isn't a proxy
>>> anymore. It becomes a regular object. None of what used to be p's traps
>>> when it /was/ a proxy is going to be called anymore through p
>>> surface-syntax iteraction. After the call to a succeeding (non-throwing)
>>> fix trap, what we have falls under the definition of an Object as known in
>>> ES5 (and previously). Another way to put it is that there is no way for an
>>> external program to distinguish if p is a proxy or an object (unless this
>>> external program had overriden Proxy.create beforehand).
>>>
>>> The way I see it, a proxy is trapping and that's it. What is "fixed" is an
>>> object, because the proxy has lost all its "magic" (and cannot get it back
>>> by design).
>>>
>>> In my opinion, we should stop talking of proxies as "fixed" and stop using
>>> this terminology because it may cause confusion.
>>> If there is an agreement on this, I'd suggest to rename the
>>> Proxy.isTrapping method as Proxy.isProxy since as I understand it, saying
>>> that a proxy is trapping is a tautology.
>>>
>>> What's your opinion?
>>>
>>> David
>>> _______________________________________________
>>> es-discuss mailing list
>>> [email protected]
>>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss