io.jsは新しいバージョンのV8エンジンを対象にビルドされています。V8エンジンを最新版に保つことで、io.js開発者はECMA-262 specificationで定義されたJavaScriptの新機能をすぐに利用することができます。
io.js {{project.current_version}}はV8 {{project.current_v8}}を利用しています。これはNode.js™ 0.12.xが利用しているV8 3.28.73よりもES6サポートが進んだバージョンです。
Node.js™ 0.12.x (V8 3.28+)においては、--harmony
ランタイムフラグを使うと実装済み、ステージング段階、開発中のすべてのES6機能(--harmony-proxies
でのみ有効なproxies
を除く)をまとめて有効にします。つまり、Arrow Functionsのような極めてバグの多いもしくは壊れた機能も、ほとんど問題なく使えるgeneratorsなどと同様に有効になるということです。そういった事情から、ほとんどの開発者はharmony featureフラグ(例: --harmony-generators
)を使って特定の機能のみを有効にしがちです。
io.js (V8 4.1+)では、こういった複雑なことをする必要は一切ありません。すべてのharmony featuresはshipping、staged、そしてin progressの三つのグループに分けられました。
- shipping featuresは、V8において安定していると判断された多くの機能、例えばclassesやgeneratorsやtemplates、新しいstringメソッドなどです。これらはio.jsではデフォルトで利用可能であり、ランタイムフラグは必要ありません。
- staged featuresは、ほぼ完成に近いものの、テストが完全ではなかったり最新の仕様に沿っていないなどの理由で、V8チームがまだ安定していると判断していない(例えば、まだ見つかっていないエッジケースがある可能性がある)機能です。V8 3.26におけるgeneratorsの状態に相当すると言えるでしょう。これらは「各自の責任で使う」タイプの機能であり、使うには
--es_staging
(または--harmony
)フラグを必要とします。
- in progress featuresはそれぞれのharmonyフラグ(例:
--harmony_arrow_functions
)で個別に利用可能です。しかし、テスト目的以外での使用は非推奨です。
-
Block scoping
V8 3.31.74.1時点で、block-scoped declarationsは意図的にstrict modeのコードにしか適用されないように実装されています。V8がES6の仕様に追従することで今後この実装に変更があるということを覚えておいてください。
-
- クラス (strict modeでのみ使用可。)
-
Collections
-
拡張オブジェクトリテラル (プロパティとメソッドの省略表現)
ほかのエンジンとの比較を含むより詳細な一覧が、compat-tableプロジェクトのページで閲覧できます。
Symbol.toStringTag
(ユーザーが定義可能なObject.prototype.toString
。--harmony_tostring
でも有効)
V8エンジンには絶えず新機能が追加されています。一般的に、それらの機能は将来的にはio.jsでも使えるようになると言えます。ただし、具体的な時期はまだお伝えできません。
io.jsに--v8-options
フラグを渡した結果をgrepすることで、どのin progressな機能が利用可能かを一覧表示できます。ただし、それらは未完成で壊れている可能性のある機能であることに注意してください。各自の責任のもとに使用してください。
iojs --v8-options | grep "in progress"
現在のio.jsにおける--harmony
フラグの挙動はstaged featuresのみを有効化するものです。--harmony
フラグはio.jsにおいては--es_staging
フラグと全く同じ作用をします。上述の通り、それらの機能は完成されてはいるものの、まだ安定しているとは言えません。安全を重視すべき場面、特にプロダクション環境であれば、V8、ひいてはio.jsでデフォルトで利用可能になるまでフラグを無効にすることを検討してください。有効化したまま運用するのであれば、V8の動作が仕様に近づくことでセマンティクスに変更があった場合、io.jsのアップグレード時に使用中のコードが意図通りに動作しなくなる可能性に備えてください。
io.jsは、使用中のio.jsのすべての依存ソフトウェアとそのバージョンを一覧できる簡単な方法を、process
グローバルオブジェクトを介して提供しています。例えば、V8エンジンのバージョンを調べるには、ターミナルで以下のコマンドを入力します。
iojs -p process.versions.v8