io.js is born!
According to the website:
Bringing ES6 to the Node Community!
io.js is an npm compatible platform originally based on node.js™.
Also, from the baseline of the io.js repository:
“A spork of Node.js with an open governance model”.
All that sounds very promising!
Things was moving really slowly lately, but now I'm sure that development will speed up.
Among the team members there are some of the finest Node.js superstars, including Ben Noordhuis (also famous for libuv), Isaac Schlueter (also famous for npm) and Fedor Indutny.
All the team members are here.
Some people are feeling concerned, that it will induce fragmentation in the community. IMHO there are wrong.
Firstly, io.js and Node.js will continue to share the same package registry. So fragmentation will only affect core development, not modules you install using npm
.
Secondly, most of core developers have moved to io.js. That's some kind of signs. Something is wrong with the Joyent's governance. Without the drag of that corporation, devs gonna dev, and that's a good news.
We don't want a slow and ill governance like the PHP one, those issues should be settled as soon as possible.
So, I see only two options:
- the happy end: reconciliation between Node.js & io.js will happen soon, the two projects will merge, dissidents will gain the power to put the governance model on the right track
- the putsch: let's face it, io.js is better than Node.js in any aspect and the governance is open... so it will simply overtake Node.js, and everyone will make the switch very quickly (just like the switch from MySQL to MariaDB)
In any case, no fragmentation will occur... and server-side Javascript will enjoy a good nitro-boost.
Harmony
Harmony is the upgrade Javascript needed. It implements Ecma-Script 6 and it really moves the language forward.
Keyed collections (Map, Set, WeakMap, WeakSet) are very very interesting things.
On my previous post, detecting acyclic/cyclic graph in object data structure was done using an array of object, searching multiple references of the same object using .indexOf()
. No doubt about it, on big graph this can easily become the bottleneck. Using a WeakMap could be so much faster: the object to check is the key.
Speaking of algorithmic complexity, searching a value is a O(n). Searching a key should be O(1) as far as I can tell (if it is a hashmap), or at least O(log n) if WeakMap use some kind of binary tree. Way faster...
Some cool new features in io.js:
- default parameters
- Promise
- let, const
- generators
- template strings
Cool Harmony features that are not in io.js at the moment:
- Proxy
- Spread operator
Performances
No benchmark at the moment, but I ran the spaceship demo of the terminal-kit lib on my laptop... The script consumes 12-14% of CPU with Node.js, and consumes only 5-7% of CPU using io.js.
Incredible!
I don't know exactly the reason of such spectacular improvements, and the very nature of the demo should not be considered as a common use case.
When I will get some time, I will test performances more seriously...
So what's up now?
You should have downloaded dat io.js already!
Test it! Hack it! Enjoy it!