sosukesuzuki.dev

2022年 sosukesuzuki 1人アドベントカレンダー

December, 16 2022

一時期 ECMA-262 と HTML が微妙にズレてた

2022年の sosukesuzuki 1人アドベントカレンダー 16 日目です。

このアドベントカレンダーを書きながらぼっちざろっくのアニメ 12 話を見ていたんですが、ちょうど最近アジカンを聞きまくっていたので盛り上がってしまいました。

注意: このブログの投稿日時は 12 月 16 日になっていますが、実際には 12 月 28 日に書いています。

さて、ECMA-262 と WHATWG HTML は微妙に連携(?)しています。

たとえば ECMA-262 の host hooks が HTML の方で参照されていたりね。

で、12 月 10 日から 12 月 26 日までの間 https://tc39.es/ecma262/https://html.spec.whatwg.org/ が微妙にズレていました。

ズレてると言っても別におかしな話ではなくて、両方とも Living Standard なので片方が先に更新しちゃうと片方が追従するまでの間はズレが生じてしまうみたいな話です。

仕様のリファクタ

最近 igallia の Nicolò Ribaudo 氏が ECMA-262 の仕様のリファクタリングを行いました。

新しい機能を実装するにあたって、今の歪を仕様上のやりにくい箇所を直しておこうということみたいです。

次の 2 つの PR で行った(ている)ようです。

また、design doc 的なものは次のリポジトリにあります。

具体的な詳細はあんまり理解していないのでちゃんと読んで別の記事として紹介できればいいなと思っているので、めっちゃ大雑把に説明します

今の ECMA-262 には Import に関連する 2 つの host hooks があります。

  • HostResolveImportedModule
  • HostImportModuleDynamically

ですがこの 2 つでは、Module Expressions や Import Reflections などの機能を追加するのが困難だということで、これらを削除し、新たに HostLoadImportedModule という host hooks を追加するそうです。

マージ日時のズレ

ECMA-262 側の修正である https://github.com/tc39/ecma262/pull/2905 は 12 月 10 日マージされましたが、HTML 側の修正である https://github.com/whatwg/html/pull/8253 は 12 月 26 日にマージされました。

つまり、12 月 10 日から 12 月 26 日までの間、HTML には、そのタイミングの ECMA-262 には存在しない host hooks である HostResolveImportedModuleHostImportModuleDynamically の定義が存在していて、本来はあるべき HostLoadImportedModule の定義が存在していなかったことになります。

どうでもいい

実際本当にどうでもいいことなんですが、仕様リーディングをしていたときに少し困惑したので記事にしました。