【メモ】ECMAScript 仕様輪読会 第25回
概要
ECMA Script 2023 の仕様書ガチ読みしようぜ☆
という輪読会。
今回は、そのうち Construct 辺りを読もうとしたところで、一旦方針を変えた会でした。
曰く「コンストラクタ読む前にクラス定義からまず読まないと分からなくね?」とのこと。
リンク系
- emanote – esspec-memo
- GitHub - tc39/how-we-work: Documentation of how TC39 operates and how to participate
- GitHub - es-meta/esmeta: ECMAScript Specification (ECMA-262) Metalanguage
ざっくり内容
GitHub - es-meta/esmeta: ECMAScript Specification (ECMA-262) Metalanguage にてシンプルなクラス定義をパースし、仕様書と照らし合わせて実行し、追いかけながら仕様書を読んでいきます。
その内容は Youtube で公開されていて、以下の Youtube で参照することが出来ます。
言語仕様…と言うかランタイムの処理を仕様に合わせて読んでいくと、実は「えっ!?」というようなものが幾つか見つかりました。
深いところを読んでいくので、言語の裏みたいなものが見えてくる…
- クラス名の衝突確認を行う処理があるが、この中で Nan/Identifir/undefined などが存在する。
でもこれはグローバルでしか検証しないので、別スコープならこの名前でクラス宣言できる。 - 同じレキシカルスコープで、var は同じ名前で何度も宣言できる。
しかし、let/const は宣言時の処理系が異なるので、同名を宣言するとエラーになる。 class Hoge {}
と宣言したとき、内部仕様的にはlet Hoge = class {};
と同等の扱いで処理してる。
だからlet Hoge = class {}; Hoge = 1;
などが通る。
色々刺激になりますね。隔週で次は 12/20 に開催するとのこと。
面白いので次回も参加しよっとw