+1. I was always glad that the shape argument had seemed to lead to the same conclusion and I am sad to see it go. But my reason for supporting the check was to catch errors early for strict object literals. I don't much care what happens here if the object literal is sloppy.
On Tue, Nov 12, 2013 at 3:55 AM, Andreas Rossberg <[email protected]>wrote: > On 26 October 2013 04:49, Allen Wirfs-Brock <[email protected]> wrote: > > The plan has been that runtime validation would be performed for any > object > > literals containing computed property keys and the current spec. draft > > contains pseudo code for doing the checks. However a bug report > > (https://bugs.ecmascript.org/show_bug.cgi?id=1863 ) points out an issue > with > > the current spec. For example, the current spec. throws an error on: > > > > ({get a() {}, > > get ["a"]() {} > > }); > > but not on: > > ({get ["a"]() {}, > > get a() {} > > }); > > > > Basically, it isn't sufficient to only check for an already defined > property > > key when processing property definitions that contains a computed key. If > > any computed keys exist the checking has to be done even for the > definitions > > that have literal property names. And it isn't sufficient to just > consider > > the property keys and the data/accessor property distinction, the > validation > > also has to take into account the syntactic form of the definition and > > whether or not strict mode applies.. > > > > It turns out that even in pseudo code, this is a fairly complicated set > of > > runtime validation rules to apply. I'm having a hard time convincing > myself > > that the runtime computational and meta data costs of this dynamic > > validation is justified. It costs too much and the actual benefit is > pretty > > small. > > > > ***For that reason, I propose that we drop this runtime validation of > object > > literals (and class definition). We would still have the static > validation > > and early errors for property definitions that don't have computed keys. > But > > anything that makes it past those checks (including all property > definitions > > with computed names) are just processed sequentially with no duplicate > name > > checking.*** > > I'm not convinced. I think the check is useful, and erroneous > situations like this going unnoticed could lead to really nasty > surprises. > > Is their a chance that the check could be factored into the > DefineProperty meta operator? I.e., just like the strict mode flag it > also has a flag saying whether redefinitions are allowed? > > > What about predetermining the "shape" of literal objects that include > > computed property keys? > > > > One of the reason for the dynamic checks was the desire to preserve the > > characteristics that allowed an implementation to look at an object > literal > > and statically determine exactly how many own properties the resulting > > objects would have. The hope was that an implementation could still > > determine an intended shape and that the dynamic checks would guarantee > that > > the actual constructed objects conform to that predicted shape. If we > drop > > the dynamic checks we loose that shape guarantee. > > > > I think this ability to predict an intended shape was probably a > committee > > pipe-dream. Consider this function: > > > > function makeObj(a,b,c,d,e) { > > return { > > get [a] () {}, > > get [b] () {}, > > set [c] (v) {}, > > set [d] (v) {}, > > set [e] (v) {} > > } > > } > > > > The object returned by this function might validly have 3, 4, or 5 > > properties. The is no clearly intended shape to try to guarantee. > > Fair enough, I always considered the shape argument a red herring. > > On the other hand, I think what the above primarily demonstrates is > that get/set was a regrettable choice of syntax. :) > > /Andreas > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > -- Cheers, --MarkM
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

