Yes, all API variants I have proposed should result in the equivalent performance, to the best of my knowledge.
I would even say that {lo, hi} one is easier on VMs for two reasons: - VMs tend to have some sort of escape analysis / allocation sinking and they can incorporate { lo, hi } support into this pass; - If VM desires to allocate { lo, hi } value to a single register it might be easier to do that when values are explicitly grouped, VM does not have to rediscover pairing --- it is already there. You also correctly reasoned that I proposed magic property API for the purposes of faster polyfilling. So given the choice between { lo, hi } and magical property API if I would prefer { lo, hi } iff I ignore polyfill performance. > The other main use case I can think of is large compiled C++ codebases I saw crypto libraries (e.g. NaCl) heavily relying on 64bit arithmetic. > Are there any other use cases you have in mind that really demand high > polyfill performance? I am interested in the whole number hierarchy actually (int32 - int64 - bigint). But I have no clear idea what to do here. One possibility would be to allow passing type arrays alongside with primitive numbers into something Math.big<op>. But this is pretty ugly and probably also results in abysmal polyfill performance. -- Vyacheslav Egorov On Wed, Oct 30, 2013 at 9:56 PM, Luke Wagner <l...@mozilla.com> wrote: > Just to be sure, do you agree that both the {lo, hi}-returning API and the > magic-property API should both be able to achieve equivalent performance on a > JS engine that has specifically added and optimized these int64 builtins? I > think this is true. > > Assuming so, the reason to prefer the rather more awkward magic-property API > would be purely because its polyfill is more efficient. This is a tough > choice, but it seems like bending the spec for the polyfill is overly > conservative in this case. A lot of the use cases I hear for int64 come from > crypto and other very specific algorithms which already have implementations > in JS. In such cases, it seems like the authors have to write a new version > of the algorithm using the new builtins anyway so, if performance was > important, they could just keep around the old version and pick which version > to call based on whether the new builtins are present. Or they can just wait > until the optimization is broadly available before switching. > > The other main use case I can think of is large compiled C++ codebases. > However, in our experience, C++ codebases tend not to heavily use int64 so > the overhead of the polyfill would be less significant. > > Are there any other use cases you have in mind that really demand high > polyfill performance? > > API considerations aside, though, I like the idea of bringing fast 64-bit > arithmetic to JS without waiting for value objects. > > Cheers, > Luke > _______________________________________________ > 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