OmoikaneのDOMと例外通知を実装したら、コピーとGCの寿命まで調べることになった
OmoikaneのPR #1322で追加したDOM操作、HTML解析とSanitizer、例外・Promise rejection通知を詳解する。Rust製JavaScript EngineのBoaのPromise.finallyで起きたGC寿命不備、iframe遷移と文書の所有、コピー削減、局所計測と最終CI、残る課題まで追う。
COLLECTION
OmoikaneのPR #1322で追加したDOM操作、HTML解析とSanitizer、例外・Promise rejection通知を詳解する。Rust製JavaScript EngineのBoaのPromise.finallyで起きたGC寿命不備、iframe遷移と文書の所有、コピー削減、局所計測と最終CI、残る課題まで追う。
Rust製JavaScript EngineのBoaで起きた、ephemeron経由の参照と世代別GCによる誤回収を解説する。WeakMapの値を保持する条件、固定点の計算、古い親から若い子への書き込み記録、major GC後に参照が失われた原因と回帰テストを追う。
JavaScriptのWeakMapがキーを保持し続けない仕組みを、Mapとの比較とコード例で解説する。オブジェクトへの補助情報、キーの同一性、列挙できない理由、値からキーへの参照とephemeronを扱う。
OmoikaneのWPTで起きたSIGSEGVを調べると、Rust製JavaScript EngineのBoaのgetterが返した新しいオブジェクトが、VMレジスタへ入る前のinline cache更新で回収されていた。JITの切り分け、Valgrindでの確認、root修正と回帰テストを追う。
OmoikaneでJavaScript Realmを作るたび、約1.1MBのDOM bootstrapを解析・コンパイルしていた。キャッシュ案からRust製JavaScript EngineのBoaのscope検索と字句解析の改善へ方針を変えた経緯と、test profileでの実測を記録する。
URLの#fragmentがどの要素を指し、CSSの:targetやquerySelectorの結果へどう反映されるのか。HTMLとSelectorsの仕様を手掛かりに、Omoikaneの実装とテストを追う。
Omoikaneでページに見えていた内部ホスト関数から、別オリジンのDOMやCookie、ストレージへ到達し得る経路を確認した。ブートストラップの分離、Rust側のオリジン検証、周辺処理とテストについて書く。
JavaScriptのRealmはiframeの何を分離するのか。Omoikaneで子Documentの実行環境、WindowProxy、ナビゲーション、非同期処理を実装する中で見えた境界を整理する。
OmoikaneのAcid3で見つかったRust製JavaScript EngineのBoaのGC参照保持漏れを調べた。Array.fromが取得した一時的なiterator関数の寿命、再現テスト、修正と検証結果を追う。
自作ブラウザOmoikaneで、document.cookieとHTTP通信の連携、Page Visibility API、イベントリスナー、CSS Scroll Snapなどを実装。APIをDOMやネットワーク、ホスト側の状態へつなぐ過程をまとめました。