🎄

ENCA 12日目: Cyclic Module Records の策定

2024/12/13に公開

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 はそれを継承する形でレイヤーが作られました。

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

WebAssembly ES Module Integration

現在 WebAssembly を使用する場合は JavaScript でモジュールの初期化が必要となっており、モジュールグラフに入るようになっていません。JavaScript と WebAssembly 双方でインポートできるようにする WebAssembly ES Module Integration が進行中です。

https://github.com/WebAssembly/esm-integration

https://www.youtube.com/watch?v=qR_b5gajwug

先月リリースされた Deno 2.1 にこの機能が実装されたため、ひと足早く試すことが出来ます。

https://deno.com/blog/v2.1

https://docs.deno.com/runtime/reference/wasm/

Synthetic Module Records の策定

余談ですが2024年10月に JSON Modules が Stage 4 となり ES2025 に入ることになりそうです。JSON Modules や CSS Modules のために新たに Synthetic Module Records を入れる作業がなされています。

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

Discussion