WebIDL attribute reflection

Boris Zbarsky 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 
fast...

> 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 
things.

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.  ;)

-Boris


More information about the es-discuss mailing list