[Harmony proxies][Terminology] "fixed" state of a proxy

Andreas Gal andreas.gal at gmail.com
Sun Mar 13 13:50:42 PDT 2011

There is a little twist to this. You can create a proxy that has separate implementations of [[Call]] and [[Construct]], and by fixing it, it converts to a regular functions. However, this "regular" function is different from any other non-host function: it behaves different w.r.t. to f() and new f(). At the implementation level this is reflected by the fact that we use a different internal class for these "function" objects. It also maintains all the other behaviors of the original proxy [[Call]] and [[Construct]] hooks, i.e. new f() can return "5". I am not sure whether this difference warrants talking about fixed proxies, but I wanted to point it out.


On Mar 13, 2011, at 10:08 AM, 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
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110313/ec7617f3/attachment.html>

More information about the es-discuss mailing list