- the definition of
`int`

has been changed to strict 32-bit signed integer - introduce
`Promise`

class in conformance to the ECMAScript 6 draft

The second change should be obvious. Let me explain the reasoning behind the first one.

**Background:**

Until now, definition of

`int`

in JSX has been: *a number that is at least possible to represent integers between*.

`-2`^{31}

to `2`^{31}-1

, or may or may not become `NaN`

or `+-Infinity`

This was based on our understanding that enforcing integer arithmetic in JavaScript (i.e. using

`| 0`

) would lead to slower execution speed. We wanted the `int`

type of JSX to represent some kind of integral numbers without sacrificing execution speed. And the type had been defined as such.But the advent of asm.js has changed the game. Such enforced integer arithmetic is one of the most common patterns found in JavaScript generated by Emscripten (since it compiles C/C++ code), and it would be natural to expect that existing JavaScript runtimes would optimize against such patterns.

**The Benchmark:**

So I decided to take time to run a tiny benchmark that compares the execution speed of

*ordinary arithmetic*vs.

*enforced integer arithmetic*on fib-using-int - jsPerf, and the results are interesting.

The benchmark compares three functions calculating Fibonacci numbers using loops.

// original function fib(n) { var value = 1, prev = 1; for (var i = 1; i < n; ++i) { var t = prev; prev = value; value += t; } return value; } // core operation is enforced integer arith. function fib(n) { var value = 1, prev = 1; for (var i = 1; i < n; ++i) { var t = prev; prev = value; value = (value + t) | 0; <--- HERE } return value; } // core operation and loop are integer arith. function fib(n) { n = n | 0; <--- HERE var value = 1, prev = 1; for (var i = 1; i < n; i = (i + 1) | 0) { <--- HERE var t = prev; prev = value; value = (value + t) | 0; <--- HERE } return value; }

Looking at the results below (please refer to the benchmark page for the latest numbers) the fact is that code runs about 10% faster on Chrome and Firefox when explicitly specifying an extra operation (i.e.

`| 0`

).This is not a surprise for people with the understanding of how the JIT (just-in-time-compile) engines of the runtimes work. The engines compile arithmetic operations in the original function of the benchmark into integer arithmetics with

*guards*, so that the calculation can be changed to use floating-point operations once the numbers goes out of the 32-bit integer range. But if

`| 0`

is added to the statement it becomes clear that the result of the arithmetic should be a module of 2^{32}and thus that the guards become no longer necessary.

**The Problem and the Solution:**

The problem being left is how to write code that takes benefit from such optimizations. It is hard to add

`| 0`

all over the source code, and there would be a negative performance impact unless you succeed in marking all of them correctly. It is once again clear that some kind of automated code generator is desirable for JavaScript, and this is the reason why we are happily applying the described change to JSX :-)To summarize, JSX as of version 0.9.77 supports strict 32-bit integer arithmetic; and it is easy for the users to benefit from the described optimizations within the JavaScript runtimes. It's just a matter of marking some variables as

`: int`

. And the results of assignment to the variable as well as additions, subtractions, and multiplication between such variables would be `int`

.PS. I have also written the Fibonacci calculator in asm.js, but have excluded the numbers from the benchmark since it was too slow. It seems that there exists a non-marginal overhead when calling asm.js code from JavaScript.

Interesting Article

ReplyDeleteJavascript Training in Chennai | HTML5 Online Training | JavaScript Online Training

Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a Front end developer learn from JQuery Training

DeleteAngularjs Online Training | Backbone.JS Online Training | Bootstrap Online Training | Node.js Online Training | Typescript Online Training

ReplyDelete

ReplyDeletemichael kors outletoakley sunglassesjordan 8skobe bryant shoescheap oakley sunglassesgiuseppe zanottilebron james shoescoach outletlouis vuittonlouis vuitton outletfitflopstoms shoesair jordan 13adidas ultra boostmichael kors outlet clearanceoakley sunglassescoach factory outlettrue religion shortschristian louboutin shoescoach factory outlethermes bagcheap ray ban sunglassesralph lauren salelouis vuitton bagscoach outletdesigner handbagsghd hair straightenerstoms outletray ban sunglasses outletfitflops sale clearanceasics running shoeschristian louboutin salejordans for salecheap oakley sunglasseslouis vuitton outletadidas ukcheap nfl jerseysnike factory outlettiffany outletralph lauren uk20168.2wengdongdong

ReplyDeletefitflopslouis vuitton borseoakley sunglasses cheapbirkin handbagstimberland outletdiscount oakley sunglasseskd shoeschristian louboutin outletcoach outlet onlinecheap ugg bootszhi20161216

Good one, Thanks for your information.

ReplyDeleteJava Training in velachery | Java Training institute in velachery

شركة نقل عفش بالدمام الشرق الاوسط متحصصه فى نقل عفش واثاث بالدمام ونقل العفش بالخبر كما انها توفر شركة نقل عفش بالجبيل والخبر وشركة نقل عفش بالقطيف والاحساء وجميع خدمات نقل العفش والاثاث بالمنطقة الشرقية بارخص اسعار نقل عفش بالدمام وتقدم ايضا شركة تخزين عفش بالدمام والخبر

ReplyDeleteنقل عفش بالدمام

شركة نقل اثاث بالدمام

شركة نقل اثاث بالخبر

شركة نقل اثاث بالجبيل

شركة نقل عفش بالخبر

ReplyDeleteشركة نقل عفش بالقطيف

شركة نقل اثاث بالاحساء

شركة نقل عفش الجبيل

شركة نقل عفش بالدمام

شركة تنظيف خزانات بجدة

ReplyDeleteشركات تنظيف بالطائف

نقل عفش بالرياض

شركات نقل العفش بالرياض

I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it! would you mind updating your blog with more information

ReplyDeleteDissertation Examples

I am really enjoying reading your well written articles. It looks like you spend a lot of effort and time on your blog. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work.

ReplyDeletebuy dissertation online

Today we have a lot of variety, and we can learn the same thing from different sources. Today you have the choice to choose; you can learn the same thing in so many different ways. You can go through the online resources and learn a lot. There are several websites which assist students in multiple ways; they provide Assignment Help online with other benefits as well.

ReplyDeleteThis is where you might have started your search for assignment help.The previous consumers give their feedback on the website to let the other users know about the quality of their service. For example, if you go to the AllAssignmentHelp reviews , you can get to know the opinion of different users about their services. You can also check other websites to compare and select the best service for you. my assignment help review

ReplyDeletejust information we only provide information for those who need it

ReplyDeletecara menggugurkan hamilA.

cara agar cepat hamil setelah selesai haidB.

cara agar cepat hamilC.

cara alami untuk segera mendapat kehamilanD.

makanan dan minuman agar cepat hamilE.

masa subur biar cepat hamilF.

panduan agar cepat hamil

ReplyDeleteThank you for joining us. his article is very helpful

Obat Herbal Paling Ampuh Untuk Mengobati Penyakit Hipotiroid

Manfaat Buah-Buahan Untuk Kesehatan

Obat Penyakit Sembelit Paling Ampuh

Obat Untuk Mengobati penyakit osteoarthritis

Bahaya Penyakit Muntaber dan cara mengatasinya

Obat Penyakit Jantung Bengkak

Cara Mengobati Penyakit Leukimia