WebIDL attribute reflection
bzbarsky at mozilla.com
Fri Dec 28 12:31:55 PST 2012
On 12/28/12 12:24 PM, Brendan Eich wrote:
> David was questioning the new status quo, which is fine -- we benefit
> from being skeptical of our theories, as Feynman recommended. He was
> motivated by the extra complexity of ES5 accessors, which can be
> reflected on, extracted as get and set functions, called on wrong objects.
Extra complexity compared to _proxies_? Seriously?
Which sort of complexity are we worried about? Implementation
complexity? Complexity for people trying to use the web platform?
Specification complexity? Something else?
I'm happy to consider arguments that things are too complex, but I'd
like to understand the arguments. ;)
Note that in practice Gecko's implementation basically treats setters as
single-argument methods and getters as 0-argument methods and shares the
code for getters/methods/setters under the hood, so since methods
already have to handle being called on wrong objects the complexity is
pretty low for the DOM code. The complexity of setting up acccessor
properties is also pretty low since JS engines already support that.
There's a bit of complexity in the JIT to make some of this stuff
faster, but nothing even remotely comparable to trying to make proxies
> Your reply helps a lot, IMHO, in reaffirming why WebIDL, with Gecko, and
> Trident implementing, chose prototype-homed accessors. JITting
> proto-accessors is a thing engines already do. JITting through proxy
> traps (ignoring dummy target overhead) is in the future.
It's even worse than that. Without certain behavior guarantees on the
part of the proxy (which in this case would not be implemented in JS,
note, so would not be able to be analyzed by the JIT) it's impossible to
JIT through those traps.
Of course one could try to reimplement the entire DOM in JS; that way
lie other performance pitfalls.... And even then, safely calling proxy
traps has a bunch of overhead unless you can prove they don't do certain
When we have gets through a proxy down in the 20-30 cycle range on
modern hardware, I'm happy to talk about proxies performance-wise. ;)
More information about the es-discuss