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のAcid3で見つかったRust製JavaScript EngineのBoaのGC参照保持漏れを調べた。Array.fromが取得した一時的なiterator関数の寿命、再現テスト、修正と検証結果を追う。
自作ブラウザOmoikaneで使うRust製JavaScript EngineのBoaのbaseline JITで、Acid3が環境ごとに異なるメモリ異常を起こしたので、coreを調べてshared shapeの弱参照キャッシュを修正しました。