On Jul 31, 2011, at 1:04 PM, Sean Eagan wrote:

> A 'receiver' argument is not needed because it would never be
> different than the proxy, and the proxy can either be passed as an
> argument or stored either as an own property of the handler, or as a
> value keyed by the handler in a weak map, which there seems to have
> been TC39 concensus on.

Ok, right -- even without the extra proxy parameter in addition to receiver, 
dropping receiver makes sense. Sorry to go in a circle on this.

It's a trap API change, and I agree with Mark that we need Tom to bless it.


> Regarding whether or not a proxy argument should be added, there do
> seem to be advantages to passing the proxy as an argument, but I don't
> feel particularly strong about it.

There is a downside, Mark noted it in the meeting: touching the proxy is highly 
likely to diverge in runaway recursion.


>  I do however feel strongly that a
> 'proxy' argument should not be added selectively to just the 'get' and
> 'set' trap, or any other limited set of traps.  There are surely use
> cases for accessing the proxy within all traps, so for consistency's
> sake it seems the method for accessing the proxy should be the same
> across all traps.

Agreed.

/be

> 
> On Fri, Jul 29, 2011 at 8:13 PM, Brendan Eich <[email protected]> wrote:
>> On Jul 29, 2011, at 5:42 PM, Kevin Reid wrote:
>> 
>>> On Fri, Jul 29, 2011 at 15:20, Mark S. Miller <[email protected]> wrote:
>>>> ---------- Forwarded message ----------
>>>> From: Brendan Eich <[email protected]>
>>>> Date: Wed, Jul 27, 2011 at 9:21 PM
>>>> 
>>>> 
>>>> == Handler access to proxies ==
>>> [...]
>>>> Conclusion: no rationale for adding a |proxy| parameter to all traps.
>>>> 
>>>> == Proxy drop receiver ==
>>>> 
>>>> Sean Eagan pointed out in
>>>> 
>>>> https://mail.mozilla.org/pipermail/es-discuss/2011-April/013916.html
>>>> 
>>>> that the receiver parameter of Proxy handlers' get and set traps is 
>>>> useless,
>>>> due to how these derived traps layer on fundamnetal traps.
>>>> 
>>>> Conclusion: remove |receiver| from these traps.
>>> 
>>> Hi; Mark Miller asked me to post this. I am a developer working on
>>> Google's Caja, writing ES5 code which uses proxies for our DOM
>>> virtualization.
>> 
>> Thanks, you caught a blatant inconsistency in our reasoning. We used Sean's 
>> message (linked above) as a reason to remove receiver, that Sean wrote that 
>> message assuming both proxy and receiver would be parameters to get and set 
>> traps. Sean demonstrated that the two parameters would always have the same 
>> value, ergo only one was needed, and since at that time, proxy was 
>> considered important to keep (and add to all traps), receiver fell under the 
>> ax.
>> 
>> But as noted higher above, at this week's meeting, we rejected adding proxy 
>> to all traps, including get and set. Therefore we must keep the receiver 
>> parameter of those two traps, for the reasons you give. Thanks again!
>> 
>> /be
>> 
>> 
>>> 
>>> Suppose a proxy handler wishes to implement the 'set' or 'get' trap in
>>> a way similar but not identical to the derived trap — similar in that
>>> it obtains a property descriptor (from the getOwnPropertyDescriptor
>>> trap or otherwise) and proceeds according to the contents of the
>>> descriptor.
>>> 
>>> If the property being accessed is an accessor property, then the
>>> descriptor's 'get' or 'set' function should be invoked, *with 'this'
>>> being the proxy*. This behavior cannot be implemented purely within
>>> the handler object (i.e. without the explicit cooperation of the code
>>> calling Proxy.create) unless the proxy is passed to the handler.
>>> 
>>> I consider it a useful principle that it should be possible for an
>>> object with a given method (the get/set trap of the handler, here) to
>>> implement the same behavior as will be performed by the caller (Proxy)
>>> if that method did not exist (the derived trap); therefore, I
>>> recommend that the 'get' and 'set' traps should have a parameter which
>>> is the proxy.
>>> 
>>> I have no position on whether the proxy parameter should be first or
>>> last, or whether other traps should have one.
>>> 
>>> --
>>> Kevin Reid
>>> (Google intern)
>>> <http://switchb.org/kpreid/>
>>> _______________________________________________
>>> 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
>> 
> 
> 
> 
> -- 
> Sean Eagan

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to