ECMAScript 2016に新規追加される機能が50回目のEcma TC39ミーティングで確定しました。
On March 1st I will be snapshotting the ECMA262 draft to start its journey toward becoming the official ECMAScript 2016 standard!
— Brian Terlson (@bterlson) January 27, 2016
Array.prototype.includes
ES6でArray.prototype.contains
として追加される予定でしたが、Break the webであったため延期されていた機能です。
- Having a non-enumerable Array.prototype.contains may not be web-compatible
- Introducing Break the Web: Array extra methods case // Speaker Deck
Exponentiation Operator
x ** y
は Math.pow(x, y)
と同じ機能です。
詳しくは既に幾つか記事が書かれているので以下を参照してください。
- The final feature set of ECMAScript 2016 (ES7)
- ES2016 Features & ECMAScript as a Living Standard
- ES2016の追加機能が決定、あるいはES7言うな問題 - teppeis blog
ES2016からは機能ごとのProposalを出し、承認されたらECMAScriptの仕様にマージするという形にプロセスが変わっています。
上記の追加された機能がマージされた仕様書のスナップショットが3月に、
最終的にEcma GAで承認されたら6月に正式なECMAScript 2016としてリリースされます。
以下にES2016のドラフト版などがリリースされているので、これを見るのが分かりやすいです。
ECMAScriptもWHATWGのHTMLのようにLiving Standardとなっているので、バージョン番号はスナップショット的な扱いです。
これまでのドラフト版を見ると追加された機能以外も仕様的には色々なアップデートが含まれていることが分かります。
変更された仕様
幾つか例をあげてみます。
Promise.all
とPromise.race
が@@species
を無視するように
ES6ではPromise.resolve
が@@species
を無視する変更は入ってましたが、allとraceについても同様の変更が入りました。
HostPromiseRejectionTrackerの抽象インタフェースが追加された
これはHostPromiseRejectionTracker
をHost環境(ブラウザなど)が実装していると、
PromiseでUnhandled Rejectionが起きた際に呼ぶという仕様です。
この仕様とWHATWG/htmlが連携し、'unhandledRejection'
と'rejectionHandled'
イベントの仕様が実装されています。
(具体的にユーザーが使うのはこっち)
- Promise Error Handling
'unhandledRejection'
と'rejectionHandled'
について解説したもの
GeneratorFunctionから[[Construct]]
が取り除かれた
ES6ではGeneratorFunctionがnew
できました。
しかし、ES2016では例外を投げるように変更されました。
([[Construct]]
を持つ == new
できる)
var g = { *g() {} }.g;
new g(); // ES6ではvalid、ES2016ではthrow error
Proxyの[[Enumerate]]
trapの変更
まだ仕様に変更は入ってないですが、変更が予定されています。
このように、追加された機能以外も細かな変更などが行われています。
Breaking Changeですが、まだ利用してるケースも少ない(そもそも実装が少ない)ので早いうちに修正してるという印象です。
変更を知る方法
このような正式な変更はどこで知るのかを簡単にまとめてみます。
細かい修正以外の変更は、2ヶ月に1回開催されているTC39のミーティングで議論されてから追加されます。
情報の伝達が早い順で並べるとTwitter > GitHub > その他という感じです。
TC39のミーティング中は、TC39メンバーのTwitterを見るのが早いです。
現在、Editorの@bterlsonさんと@rwaldronさんを見ておくといいかもしれません。
TC39 Meeting Notes
ミーティングの内容は後日GitHubに公開されます。
ミーティングノートが公開されたら、毎回自分は読書会をやっているので興味がある人は一緒に読みましょう。
GitHub
ECMAScriptの仕様はGitHubで管理されています。
そのため実際に入る変更はIssueやPull Requestを見ていれば分かります。
Proposalはそれぞれリポジトリがあるので、ミーティングがある時期に大体Issueなどが更新されています。
その他
その他公式ではないものとしてECMAScript周りについてよく扱うサイトとしては以下のようなものがあります。
自分は@EcmascriptDailyにECMAScript周りの情報を投げてますが、
興味がある人はフォローとかしてみるといいです。
Realtime JSer.infoのような感じで随時更新されます。
Contributing
自分自身はあんまり仕様の議論に参加しようという意欲はないですが、
ドキュメントは常に正しくあるべきという考えなのでその辺に対するコミットをしてます。
TC39 MTG Notes MTG | Doorkeeper後に毎回ミーティングノートの修正を送ったりしています。
また、ProposalがStage 3ぐらいになるとそのProposalのリポジトリがgithub.com/tc39に移管されます。
その時にURLがそのままだったりすることが多いので修正や指摘をして回るということをやったりしています。
こういうのは気づけば誰でもできると思うので、コントリビュートしやすいと思います。
ecma262やtest262もEditorialだったり小さな変更なら直接IssueやPull Requestできるので、その辺を見てみると面白いのかもしれません。