Could we make %ArrayPrototype%'s [[DefineOwnProperty]] throw or no-op for numeric keys?
d at domenic.me
Thu Apr 16 03:23:35 UTC 2015
Just an idle thought:
Many of the spec-compliance bugs in engines' array implementations over the last couple years have had to do with handling what happens when you e.g. install getters or setters on %ArrayPrototype%. I've been told that handling this case adds lots of complexity to the implementations and their optimizations.
Would it be worthwhile to explore making this impossible? Since %ArrayPrototype% is an exotic object anyway, we could give it a custom [[DefineOwnProperty]] that behaves similarly to that of array exotic objects, but disallows defining numeric keys. I guess this comes down to a few questions:
- Would this actually give gains for implementers? My information here is secondhand and inferred.
- Would the implementation complexity introduced by this change (separate exotic object types for arrays vs. %ArrayPrototype%) be worth the gains elsewhere, or is it just trading one weirdness for another?
- Is this feasibly web-compatible? (i.e. worth trying?)
Curious what implementers think.
More information about the es-discuss