<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jul 23, 2015, at 12:22 PM, Keith Miller wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html charset=utf-8"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial;" class="">I would like to verify my reading of the %TypedArray% Object from the es6 spec. It seems from 22.2.1 that there is a single intrinsic object/prototype that each constructor/instance inherits from, respectively.</div></div></div></blockquote><div><br></div><div>Each of the nine concrete constructors (%Int8Array%, etc.) directly inherit (via their [[Prototype]] internal slot from %TypedArray%.</div><div><br></div><div>Each of the nine concrete constructors have an associated unique prototype object (%Uint8ArrayPrototype%, etc.). Each of those objects inherit (via their [[Prototype]] internal slot from %TypedArrayPrototype%.</div><div><br></div><div>Instance of the nin concrete constructors each have their [[Prototype]] initially set to the corresponding intrinsic prototype object.  For example the an instance of %Int8Array% will have its prototype set of %Int8ArrayPrototype%</div><div><br></div><div>This is all specified in</div><div>   <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-typedarray-constructors">http://www.ecma-international.org/ecma-262/6.0/#sec-typedarray-constructors</a> </div><div>   <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-typedarray-prototype-objects">http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-typedarray-prototype-objects</a> </div><div>   <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-typedarray-instances">http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-typedarray-instances</a> </div><div><br></div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial;" class="">Relevant text: “The %TypedArray% intrinsic object is a constructor function object that all of the <i class="">TypedArray</i> constructor object inherit from. %TypedArray% and its corresponding prototype object provide common properties that are inherited by all <i class="">TypedArray</i> constructors and their instances.” </div><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial;" class="">Is this the correct reading of the spec?</div></div></div></blockquote><div><br></div><div>yes, as long as you aren't conflating the inheritance of the constructors and the inheritance of the instances</div><div><br></div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial;" class="">If so, I believe this goes against the current implementation in Safari, Chrome, Firefox, and IE, which have distinct prototypes for each element type.</div></div></div></blockquote><div><br></div><div>Prior to ES6 there was no standard specification that fully defined the the proper inheritance hierarchy for these constructors, so implementations did various things.  ES6 now provides a standardized hierarchy that all implementations are expect to use.</div><div><br></div><div>Note that there is still a distinct prototype object corresponding to each concrete constructor, but it is not visibly populated with the built-in instance methods. Instead they are inherited form %TypedArrayPrototype%.</div><div><br></div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class=""><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; -webkit-text-stroke-width: initial;" class="">Additionally, assuming my reading is incorrect, it appears each %TypedArray%.prototype function is required to be sufficiently generic such that it can operate on any of the element types. It was my impression that typed arrays were intended to be as fast as possible, however, requiring a generic implementation contradicts that goal.</div></div></div></blockquote><div><br></div><div>Performance is a quality of implementation issue and different implementation may make differing performance trade-offs.  An implementation is free to optimize this method using techniques it can come up with, as long as the optimization does not observably violate the specification.  For example, each of the common inherited methods might internally dispatch (based upon the element type) to different element-typed specialized implementations of its algorithm.  Or an implement that uses PIC might cached a specialized implementation based upon the element type.</div><div><br></div><div>Allen</div><div><br></div><div><br></div></div></body></html>