2012/1/30 Brendan Eich <bren...@mozilla.org> > Andreas Rossberg wrote: > >> On 30 January 2012 20:17, Oliver Hunt<oli...@apple.com> wrote: >> >>> > From the PoV of JSC I suspect our biggest problem will actually be >>> our API, which essentially allows developers to override an arbitrary >>> collection of [[SomeInternalMethod]] methods, potentially inconsistently (a >>> sad fact of our api is that you can override [[HasProperty]] and >>> [[GetProperty]] independently, and have them be inconsistent:( >>> >> >> Well, it's not like the language's own object API (a.k.a. proxies) is >> any better in that respect...;) >> > > It's still a win to have fewer such mouths to feed, and in particular, > only one such mouth in the spec. I hope you're just reminding that proxies > can be abused to violate invariants that we cannot enforce (efficiently or > at all), not putting proxies into the same low class as JSC's (or > SpiderMonkey's, or any other engine's) old/over-broad embedding API. >
Proxies (also direct proxies) can indeed expose inconsistencies between fundamental and derived traps, but throwing away the derived traps in favor of removing such inconsistencies seems like a bridge too far. Not only is there economy of expression to consider (it's logical that the expression |name in obj| triggers a "has" trap that directly corresponds to the intercepted operation), but derived traps in general need to perform less object allocations to produce a result. For instance, if the expression |name in obj| would trigger the "getOwnPropertyDescriptor" trap instead of the "has" trap, a property descriptor could be allocated only to have the in-operator test whether the descriptor is undefined. Also, we provide the VirtualHandler API < http://wiki.ecmascript.org/doku.php?id=harmony:virtual_object_api> to make it easier for developers to just implement fundamental traps and inherit derived trap fallback implementations. When used properly, proxies with such a handler will never be internally inconsistent. So, I don't think "derived" internal methods such as [[HasProperty]] necessarily need to be refactored, other than to the extent described in the "proto climbing refactoring" proposal < http://wiki.ecmascript.org/doku.php?id=harmony:proto_climbing_refactoring>. Cheers, Tom
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss