Hello Mark, my understanding of the identity-preserving membrane pattern is a one to one relation from proxy to target, I'm right?
In our case we could have multiple proxies for one target, this should blow up the WeakMaps inside, if I think correctly. Or can you explain me the usage for this case? Best regards Andreas Am Montag, 2. Dezember 2013 21:15:26 UTC+1 schrieb Mark S. Miller: > Why not use the identity-preserving membrane pattern? > > > > > > On Mon, Dec 2, 2013 at 10:36 AM, Andreas Schlegel < > > schlegel.andr...@gmail.com> wrote: > > > > > Hello Tom, > > > > > > you're right I'm working with prof. Peter Thiemann. > > > > > > The intention was to compare the targets not the proxy, if the > > > isTransparent trap is set, but your right I haven't observed your case. But > > > I think also the developer have to decide, if he want to implementation the > > > trap. > > > > > > The problem of prof. Peter Thiemann is, that the Proxies aren't really > > > transparent and in an environment with multiple proxies for one target he > > > cannot compare them. I think also it would be nice to give an alternative > > > with an really transparent proxy. In my opinion this could also be a new > > > variation of proxies, but this is my opinion. > > > > > > Is it eventually possible to include a check for the isTransparent trap > > > into the get trap to get either the target, if wanted, or the error? > > > > > > At the moment I've changed the LooselyEqual and StrictlyEqual methods of > > > the Interpreter.cpp to get the target instead of the proxy. But after a > > > chat in the jsapi IRC today, I know I need to change a lot more in the JIT > > > to get all Fast Path cases for == and ===. > > > > > > If there is a way to change only a part of the Proxy API instead, e.g. the > > > get trap, to get the target, if wanted. It would be really nice. > > > > > > Thank you for your feedback, I hope I don't work against your opinion. > > > > > > Best regards, > > > Andreas > > > > > > > > > Am 02.12.2013 18:10, schrieb Tom Van Cutsem: > > > > > > Hello Andreas, > > > > > > I'm not going to give implementation-level advice but as one of the > > > designers of the Proxy API rather some high-level feedback on your proposal: > > > > > > I assume you're working with prof. Peter Thiemann who has been using > > > proxies to implement contracts in JavaScript, so I think I know where > > > you're coming from. > > > > > > Nevertheless, I'm not sure whether your goal of allowing proxies to > > > intercept the '==' and '===' operators _in general_ makes much sense. > > > > > > Consider: > > > > > > var target = { x: 42 }; > > > var p1 = new Proxy(target, { isTransparent: function() { return true; } > > > }); // a transparent forwarding proxy > > > var p2 = new Proxy(target, {get: function() { throw new TypeError(); } }); > > > > > > In this case, > > > > > > p1.x === 42 > > > p2.x // throws TypeError > > > > > > Yet, you want to make it possible for p1 and p2 to be identity-equal (if > > > they implement your isTransparent() trap). > > > > > > I believe this will go against the expectations of most code, which > > > assumes that if p1 and p2 are identity-equal, one should be able to > > > substitute p1 for p2 without any observable difference. > > > > > > Is it really necessary to make a general extension to proxies to make > > > your use case work? > > > > > > Best regards, > > > Tom > > > > > > 2013/12/1 Brendan Eich <bren...@mozilla.com> > > > > > >> This just came in on the SpiderMonkey internals dev list -- can you > > >> provide guidance? Feel free to bounce to es-discuss. Thanks, > > >> > > >> /be > > >> > > >> Begin forwarded message: > > >> > > >> *From:* schlegel.andr...@gmail.com > > >> *Date:* December 1, 2013 at 11:16:56 AM GMT > > >> *To:* dev-tech-js-engine-internals@lists.mozilla.org > > >> *Subject:* *[JS-internals] Transparency of JavaScript Proxies* > > >> > > >> Hello, > > >> > > >> I'm a student at the university of Freiburg. > > >> > > >> I write my master thesis about transparency of JavaScript proxies. > > >> > > >> The topic is, that the proxies are not really transparent, because the > > >> Equal-Operators (== and ===) compare the references of the proxies and not > > >> of the targets. Also the WeakMap uses the proxy as key and don't allow the > > >> target also as key, if a proxy was inserted. > > >> > > >> First Question: > > >> --------------- > > >> I should implement an addition for the Proxy API in form of a new Handler > > >> Trap, which says if a proxy is really transparent or not. > > >> > > >> The trap should look like this: > > >> > > >> var handler = { > > >> isTransparent: function(){ > > >> return true; > > >> } > > >> }; > > >> > > >> With this trap I should change the operators for comparing either the > > >> target or the proxy, dependent of the result of the trap. > > >> > > >> I've implemented the following Methods for the BaseProxyHandler and Proxy: > > >> > > >> bool > > >> BaseProxyHandler::isTransparent(JSContext *cx, HandleObject proxy, bool > > >> *bp) > > >> { > > >> return Proxy::isTransparent(cx, proxy, bp); > > >> } > > >> > > >> bool > > >> Proxy::isTransparent(JSContext *cx, HandleObject proxy, bool *bp) > > >> { > > >> JS_CHECK_RECURSION(cx, return false); > > >> return proxy->as<ProxyObject>().handler()->isTransparent(cx, proxy, > > >> bp); > > >> } > > >> > > >> How can I integrate the new trap into the proxy? > > >> I've found the "const Class js::ObjectProxyObject::class_" must I do an > > >> new entry for the trap? > > >> > > >> > > >> Second Question: > > >> --------------- > > >> I've found the "static JSObject * proxy_WeakmapKeyDelegate(JSObject > > >> *obj)". Can I make a trap to use a Proxy as key in a WeakMap but use the > > >> target to get the value with this method? > > >> > > >> Third Question: > > >> --------------- > > >> Is there a documentation for the Proxy API specific to the C++ > > >> implementation? > > >> > > >> Thanks a lot > > >> > > >> Andreas Schlegel > > >> _______________________________________________ > > >> dev-tech-js-engine-internals mailing list > > >> dev-tech-js-engine-internals@lists.mozilla.org > > >> https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals > > >> > > >> > > > > > > > > > > > > -- > > Cheers, > > --MarkM _______________________________________________ dev-tech-js-engine-internals mailing list dev-tech-js-engine-internals@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals