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後に参照が失われた原因と回帰テストを追う。
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での実測を記録する。
OmoikaneのAcid3で見つかったRust製JavaScript EngineのBoaのGC参照保持漏れを調べた。Array.fromが取得した一時的なiterator関数の寿命、再現テスト、修正と検証結果を追う。
自作ブラウザOmoikaneで使うRust製JavaScript EngineのBoaのbaseline JITで、Acid3が環境ごとに異なるメモリ異常を起こしたので、coreを調べてshared shapeの弱参照キャッシュを修正しました。
Rust製JavaScript EngineのBoaのTest262実行中にallocatorのエラーで落ちた問題を調べたら、Promise解決処理中の保持不足が原因だった。
Rust製JavaScript EngineのBoaに追加したスタック保護がASANのfake stackで浅い入力まで拒否していたので、ローカル変数のアドレスからスタックポインタを直接読む方式へ変更しました。
Rust製JavaScript EngineのBoaで、未最適化パーサーが有効なJavaScriptの解析中に2 MiBのスタックを使い切ってabortしたので、スタック使用量を減らして過深な入力を構文エラーにしました。