- From: Rick Waldron <waldron.rick@gmail.com>
- Date: Thu, 31 Jan 2013 23:20:07 -0500
- To: David Bruant <bruant.d@gmail.com>
- Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>
- Message-ID: <CAHfnhfqKofe+gE3qe3EjY0CGHcNpH-btoty8bzjEa1zZOadrHg@mail.gmail.com>
On Thursday, January 31, 2013, David Bruant wrote: > Hi, > > # Proxies and what they change to what we know > > ECMAScript 6 introduces proxies [1]. A proxy is composed of a target which > can be any object and a handler which defines some behavior (on property > access, freeze, property enumeration, etc.). > Ideally, a proxy transparently emulates the target it "wraps". For > instance, a proxy which target is a DOM Node would be seen as a Node. > However, reality is a bit more complicated. To start with, proxies expose > the guts of spec algorithms in ways that weren't possible before. For > instance, run this in Firefox: > > var a = [1, 7, 9, 3, 2, 0, 4, 8, 6, 5]; > var observedOrder = [] > > var pa = new Proxy(a, { > get: function(target, name){ > observedOrder.push(name); > return target[name] > }, > set: function(target, name, value){ > observedOrder.push({name: name, value:value}) > return target[name] = value > } > }) > > pa.sort() > > console.log(observedOrder) > > You can observed that Firefox first pulls all array values, (then runs an > algorithm of its own), then puts them back sorted in one batch. Before > proxies, this kind of things couldn't be observed. > As you can imagine it applies to every single algorithm, including the > WebIDL ones I guess. Hopefully, by now, you're scared as much as I am of > the potential implementation inconsistencies proxies can reveal. > > > # Proxies aren't suitable for all usages > > A discussion on es-discuss with Boris Zbarski revealed that if proxies > wrapping DOM Nodes could be inserted in the DOM tree, then they would > likely reveal how and when selector matching is performed by the browser > which is vastly undesirable because selector matching can be done in > parallel. Also, in one of the handler trap, the tree could be modified, > ruining selector matching. > > I would like to believe this is an exception, but probably not. I think > every spec will have to specify how the algorithms interact when being > passed proxies to the object they're supposed to interact with. > > # Default behavior > > I think the safe default (which should probably be put in WebIDL) is to > not accept proxies in function arguments, as this value, etc. and throw > when seeing one. > At least that's future-proof. > > # Revising each spec to take proxies into account > > Given the above default each spec will have to opt-in to say whether it > considers a proxy to one of its objects as a legitimate object. The above > default allows to decentralize the decision so that each spec to make the > decision on its own time. > It would make sense to send an email to everyone defining JS APIs to tell > them about proxies and that they have to make a decision, but I wouldn't > know how to procede for that. Isn't the intention of WebIDL to be language agnostic? To be clear, I agree that there needs to be behaviour specification for the DOM w/r to Proxy. I'm interested in the implications of WebIDL attempting to specify a language specific behaviour without using that language's own spec language. Rick > Thoughts? > > David > > [1] http://wiki.ecmascript.org/**doku.php?id=harmony:direct_**proxies<http://wiki.ecmascript.org/doku.php?id=harmony:direct_proxies> > >
Received on Friday, 1 February 2013 04:20:34 UTC