Skip to content
This repository was archived by the owner on Sep 7, 2022. It is now read-only.

Latest commit

 

History

History
176 lines (114 loc) · 13.3 KB

es6.md

File metadata and controls

176 lines (114 loc) · 13.3 KB

io.jsにおけるES6

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サポートが進んだバージョンです。

--harmonyフラグは不要になります

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はshippingstaged、そしてin progressの三つのグループに分けられました。

  • shipping featuresは、V8において安定していると判断された多くの機能、例えばclassesgeneratorstemplates新しいstringメソッドなどです。これらはio.jsではデフォルトで利用可能であり、ランタイムフラグは必要ありません
  • staged featuresは、ほぼ完成に近いものの、テストが完全ではなかったり最新の仕様に沿っていないなどの理由で、V8チームがまだ安定していると判断していない(例えば、まだ見つかっていないエッジケースがある可能性がある)機能です。V8 3.26におけるgeneratorsの状態に相当すると言えるでしょう。これらは「各自の責任で使う」タイプの機能であり、使うには--es_staging(または--harmony)フラグを必要とします。
  • in progress featuresはそれぞれのharmonyフラグ(例: --harmony_arrow_functions)で個別に利用可能です。しかし、テスト目的以外での使用は非推奨です。

io.jsでデフォルトで利用可能なES6の新機能

ほかのエンジンとの比較を含むより詳細な一覧が、compat-tableプロジェクトのページで閲覧できます。

--es_stagingフラグで使えるES6の機能

  • Symbol.toStringTag (ユーザーが定義可能なObject.prototype.toString--harmony_tostringでも有効)

開発段階のES6の機能

V8エンジンには絶えず新機能が追加されています。一般的に、それらの機能は将来的にはio.jsでも使えるようになると言えます。ただし、具体的な時期はまだお伝えできません。

io.jsに--v8-optionsフラグを渡した結果をgrepすることで、どのin progressな機能が利用可能かを一覧表示できます。ただし、それらは未完成で壊れている可能性のある機能であることに注意してください。各自の責任のもとに使用してください。

iojs --v8-options | grep "in progress"

--harmonyフラグを利用したインフラがあります。フラグを無効にすべきですか?

現在のio.jsにおける--harmonyフラグの挙動はstaged featuresのみを有効化するものです。--harmonyフラグはio.jsにおいては--es_stagingフラグと全く同じ作用をします。上述の通り、それらの機能は完成されてはいるものの、まだ安定しているとは言えません。安全を重視すべき場面、特にプロダクション環境であれば、V8、ひいてはio.jsでデフォルトで利用可能になるまでフラグを無効にすることを検討してください。有効化したまま運用するのであれば、V8の動作が仕様に近づくことでセマンティクスに変更があった場合、io.jsのアップグレード時に使用中のコードが意図通りに動作しなくなる可能性に備えてください。

io.jsがどのバージョンのV8を使っているか調べるには?

io.jsは、使用中のio.jsのすべての依存ソフトウェアとそのバージョンを一覧できる簡単な方法を、processグローバルオブジェクトを介して提供しています。例えば、V8エンジンのバージョンを調べるには、ターミナルで以下のコマンドを入力します。

iojs -p process.versions.v8