このプレゼンテーションは、baseballyama氏とota-meshi氏が、JavaScriptパーサー `acorn` に `using` 構文(Explicit Resource Management) を対応させる過程と、その実装がJavaScriptエコシステム全体に与えた影響について解説するものです。
発表の概要
前半:`acorn` への `using` 構文の実装 (baseballyama氏)
`using` 構文とは、リソースのクリーンアップ処理(`[Symbol.dispose]`)をブロックの終わりで自動的に呼び出す構文です。非同期用の `await using` もあります。
構文の複雑さとして、`using` は予約語ではないため、`using using = ...` は有効ですが、分割代入が使えない、`await using` の後に改行が許されないなど、非常に複雑なルールがあります。
実装プロセスとして、仕様書を読み、Babelなどの既存実装を参考にしながら、`acorn` のコードを初めて読み解き、`using` と `await using` の対応を段階的に行いました。この分野ではAIは役に立たなかったと報告されています。
後半:エコシステムへの影響 (ota-meshi氏)
トップレベル `using` の問題として、`using` 宣言は、ES Module のトップレベルでは許可されますが、Script のトップレベルでは構文エラーになります。
CommonJS (CJS) の特異性として、CJS は一般的に Script 扱いですが、Node.js ではファイル全体が関数でラップされるため、トップレベルに見える `using` 宣言が実際には関数内となり、エラーになりません。
エコシステムへの波及として、この `acorn` での対応がきっかけとなり、CJS の特異な動作(トップレベル `return` や `using`)をどう扱うかが Acorn, Babel, ESLint, SWC などのメンテナー間で議論されました。
結論として、解決策として、`acorn` は `sourceType: "commonjs"` という新しいオプションを導入しました。この変更は Babel や SWC にも波及しました。最終的な結論として「CommonJS の使用をやめましょう」と提言されています。