🎄

ENCA 1日目: Normative Changes とは

2024/12/01に公開

ECMAScript の策定プロセス

JavaScript の言語仕様である ECMAScript は Ecma TC39 によって策定されています。大体隔月で会議をしており、その議題議事録が公開されています。

ECMAScript に入れたい提案(プロポーザル)については TC39 の誰かが担当者(champion)となり、ステージを進めていきます。最終的に、コア機能については ECMA-262 へ、Intl については ECMA-402 へ取り込まれます。

https://tc39.es/process-document/

Editorial Changes と Normative Changes

ECMAScript の振る舞いや意味が変わらない仕様変更のことを Editorial Changes と呼びます。一方で振る舞いや意味が変わる変更は Normative Changes です。

Editorial Changes

Editorial Changes は typo の修正であったり、仕様の中身をわかりやすい表現に改めたりといった、いわばリファクタリング的な変更です。編集者(editor)による承認をもって取り込まれます。

最近入った Editorial Changes を一つ挙げると、今まで Well-known Symbols は仕様で @@iterator のように記述されていましたが、デコレーターの提案と見た目が紛らわしいということから %Symbol.iterator% と記述するように改められました。

https://github.com/tc39/ecma262/pull/1314

これは既存の提案仕様や HTML や Web IDL など Web 標準仕様の修正が必要で影響が大きかったため、取り込まれるのに6年ほどかかったようです。

Normative Changes

繰り返しになりますが Normative Changes は振る舞いや意味を変える変更です。JavaScript エンジンの実装に影響を与えることもあり、会議での合意が必要となっています。各提案が仕様に取り込まれる場合についてが目立ちますが、実は提案とは別に小さい修正などを入れたい場合についても会議で合意が得られれば取り込まれます。

一つ例を上げると、オブジェクトリテラルの __proto__Object.prototype.__proto__ の仕様が Annex B から移動されました。前者は通常の仕様として、後者は NORMATIVE OPTIONAL, LEGACY として降格扱いとなりエンジンが実装しなくてよいものとして扱われるようになりました。

https://zenn.dev/pixiv/articles/a211183011cd58

Annex B については Masaki Hara さんの記事が詳しいです。

https://zenn.dev/qnighy/articles/1d96f2c0c662f6

https://zenn.dev/qnighy/articles/550be3a1f42707

1人 ECMAScript Normative Changes Advent Calendar 2024

このアドベントカレンダーでは TC39 会議で話題に出た(もしくは今後出るであろう)小さい修正について紹介していこうと思います。少しでも ECMAScript について興味を持ってくれれば嬉しいです。

https://adventar.org/calendars/10903

Discussion