7 ポイント 投稿者 GN⁺ 2024-11-19 | 1件のコメント | WhatsAppで共有
  • Novaは、データ指向設計を特徴とするJavaScriptエンジンで、性能とキャッシュ効率を最大化するために考案された構造を採用している
    • メモリ脆弱性の防止と性能最適化を同時に追求
  • 主な特徴:
    • JavaScriptヒープに割り当てられたすべてのデータは、型ごとのベクターに保存される(数値は数値ベクター、文字列は文字列ベクターなど)。
    • ヒープ参照は型に応じて区別されたインデックスとして処理され、これによりメモリ安全性とサイズ効率が得られる。
    • オブジェクトは型ごとに分けてベクターに保存される(通常のオブジェクト、配列、DataViewなど)。
    • 非通常オブジェクトは、必要な場合にのみ通常オブジェクトのデータを参照するよう設計されている。
    • オブジェクトは、使われないデータの読み取りを避けるため、積極的に分離して保存される。
  • まだ開発中。エンジンの機能は非常に限定的で、test262テストスイートの約47%しか通過していない

1件のコメント

 
GN⁺ 2024-11-19
Hacker Newsの意見
  • アーキテクチャ上の選択についての議論は興味深いが、ほとんどの人には比較できる文脈が不足している。V8のアーキテクチャと比べてどんな利点があるのか理解しにくい
  • Lispインタプリタのようなプロジェクトについて考えたことがあり、いくつかの主な利点を特定した
    • 均一な割り当ては、アラインメントの隙間がないことを意味する
    • ガベージコレクションにおける線形アクセスの利点
    • ポインタより小さいインデックス
    • 型ごとに分けられたインデックスはサイズを節約できる
  • V8との比較をすぐに行う必要はない。V8は何十億ドル規模のプロジェクトだ
  • Fabrice BellardのJSエンジンを参考にするとよさそうだ
  • V8のデータ割り当て方式
    • すべてのデータは複数あるヒープ領域のいずれかに割り当てられる
    • ヒープ参照は実際のポインタ、またはポインタ圧縮を使う場合はヒープベースからのオフセットである
    • V8のオブジェクトは必要なすべてのデータを含み、ほとんどは単一の割り当てに格納される
  • データ指向設計は、データアクセス方式を理解していることによって方向づけられる。一般的なデータアクセスが同じ型のオブジェクトへの線形アクセスだと仮定する理由が気になる
  • 「数値は数値ベクタに入る」は一般的ではない。JSエンジンは通常、NaN-boxingやインラインの小さな整数を使う
  • NaN-boxingの利用を検討したのか気になる。型別ベクタはGCによって圧縮されるのか、それともフリーリストを維持するのか気になる
  • "Don’t Stop the BIBOP: Flexible and Efficient Storage Management for Dynamically Typed Languages" を読んでみることを勧める
  • このJSエンジンが実験的なものなのか、それともECMAscript仕様全体の実装を目指しているのか気になる
  • Rust Boaプロジェクトを追っているが、まだ本番投入の準備はできていないと思う
  • データ指向アプローチと型別ベクタは、V8のような従来のアーキテクチャとはかなり異なる
    • 実際のシナリオでの性能: 複雑で非線形なデータアクセスパターンを含むシナリオで、NovaをV8やSpiderMonkeyと比較したベンチマークがあるのか気になる
    • ガベージコレクションにおけるトレードオフ: ベクタの成長や圧縮がメモリ断片化や性能ボトルネックを引き起こす可能性があるのか気になる
  • 特定のアプリケーションプロファイルを念頭に置いているのか気になる
    • ゲームにスクリプトエンジンを組み込むのに有用かもしれない
  • "kind-specific vectors" における "kind" という語の意味が気になる
    • function X(a) { this.a = a; }function Y(b) { this.b = b; } は異なる種類のオブジェクトと見なされるのか気になる
    • リテラルでオブジェクトを生成するとき、{a: 1}{b: 2} は異なる種類のオブジェクトと見なされるのか気になる