ENCA 12日目: Cyclic Module Records の策定
ECMAScript のモジュール
ECMAScript にはもともとモジュール1つをカプセル化して表現した Abstract Module Records という抽象クラスと、それを継承した Source Text Module Records 具象クラスのみが定義されていました。
Source Text Module Records がいわゆる JavaScript モジュールを表しており、ざっくり以下のような特徴を持ちます。
- JavaScript のソースコードを持つ
- 他のモジュールと(循環可能な)依存関係を持ち、有向グラフを作る
- モジュールグラフから、それぞれのモジュールの実行順が定められる
Cyclic Module Records の策定
WebAssembly の登場により JavaScript のソースコードを持たないが、依存グラフに参加出来るモジュールが仕様に必要となりました。それが Cyclic Module Records です。
今まで Source Text Module Records で定義されていたモジュールグラフや実行順について Cyclic Module Records 抽象クラスに定義を移し、Source Text Module Records はそれを継承する形でレイヤーが作られました。
WebAssembly ES Module Integration
現在 WebAssembly を使用する場合は JavaScript でモジュールの初期化が必要となっており、モジュールグラフに入るようになっていません。JavaScript と WebAssembly 双方でインポートできるようにする WebAssembly ES Module Integration が進行中です。
先月リリースされた Deno 2.1 にこの機能が実装されたため、ひと足早く試すことが出来ます。
Synthetic Module Records の策定
余談ですが2024年10月に JSON Modules が Stage 4 となり ES2025 に入ることになりそうです。JSON Modules や CSS Modules のために新たに Synthetic Module Records を入れる作業がなされています。
Discussion