I don't think generating 16bit values is beneficial -- either 8bit values for byte at a time processing or full [u]int32 makes more sense. I think the only reason for 16bit to come up is ecmascript's notionally 16bit characters.
I would prefer polymorphism of some form, for example any gimmeRandom(numberOfRandomElements, constructor = [[]Builtin Array constructor], min = 0, max = 1<<32 - 1) { var result = new constructor(numberOfRandomElements); for (var i = 0; i < numberOfRandomElements; i++) result[i] = reallyRandomValue(min, max); return result; } This would solve all the use cases presented so far (except a string of cryptographically secure values, which can be handled trivially so i've left that as a task for the reader ;) ), and would avoid the shortcomings of the existing array methods (only a finite set of types can be produced as output). --Oliver On Feb 16, 2011, at 5:37 PM, Brendan Eich wrote: > On Feb 16, 2011, at 5:33 PM, Allen Wirfs-Brock wrote: > >> On Feb 16, 2011, at 4:54 PM, David Herman wrote: >> >>> I say: let's make it typed array in the short term, but TC39 will spec it >>> as an array of uint32 according to the binary data spec. We will try to >>> make the binary data spec as backwards compatible as possible with typed >>> arrays anyway. So in the near term, implementors can use typed arrays, but >>> when they have implementations of the full binary data spec, they can >>> change to use those. It'll probably be a slightly backwards-incompatible >>> change, but by keeping them relatively API-compatible, it shouldn't make >>> too much difference in practice. Plus we can warn people that that change >>> is coming. >> >> Dave, most browsers other than FF4 internally box all integers with with >> 32-significant bits. > > I'm not sure this is still true. Certainly on x64, but also on x86, > NaN-boxing has taken over in many VMs. > > >> Some may box with 31 or even 30 significant bits. So if we spec. the value >> as a uint32 and (they are truly random enough) then at least half and >> possible 75% or more of the values in the array will be boxed in many >> browsers. Such boxing will have a much higher cost than immediate uint16 >> values. That's why I propose 16-bit values. > > Given the implementors on es-discuss, we should survey first. I'd hate to > prematurely (de-)optimize. > > I agree with David Wagner that the API has to be dead-simple, and it seems to > me having only 16-bit values returned in a JS array may tend to result in > more bit-mixing bugs than if we used 32-bit elements, if programmers are > carelessly porting code that was written for uint32 arrays. > > /be > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss