On 26 August 2013 23:18, Allen Wirfs-Brock <[email protected]> wrote: > > On Aug 26, 2013, at 1:38 PM, Erik Arvidsson wrote: > >> On Mon, Aug 26, 2013 at 3:02 PM, Allen Wirfs-Brock >> <[email protected]> wrote: >>> >>> On Aug 26, 2013, at 11:37 AM, Erik Arvidsson wrote: >>> >>>> I agree that this is crucial. I think that tips the balance over to >>>> have to do the Get of @@unscopable on every HasBinding. >>> >>> How so. The timing of the @@unscopable property and the the process of >>> using it to filter identifier binding are completely separable procedures. >>> How does restricting the filtering to own properties change the rationale >>> for getting the blacklist property once per 'with' rather than on every >>> variable reference. >> >> I just felt things got a bit too complicated to spec. >> >> I realize now that the complexity is not very different either way. >> >> I'm ambivalent which behavior I prefer. Either way solves the use case >> but dynamic lookup has the benefit that will better handle crazy edge >> cases like changing @@unscopable and [[Prototype]] within the with >> statement. > > At the cost of turning every implicit property access within a 'with' into > two property accesses (which are observable vis proxies or accessors) even > in normal cases that are far away from the crazy edges.
I would not worry about the cost -- if you want remotely decent performance, you wouldn't use with-scopes anyway (e.g. in V8, they do not get optimized at all, and every variable lookup already is a runtime call). Also, it's not hard to fast-case the normal case for objects that have no @@unscopable. Conceptual consistency and the principle of least surprise is more important. The potential performance cost is the honest price to pay for having a complicated object model. I don't like trying to cheat our way around that. /Andreas _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

