4

ポリモーフィック インライン キャッシュ (PIC) は、高価なルックアップ手順 (通常はハッシュテーブル ルックアップ) を回避するために、オブジェクトの型によって実際のメソッドをキャッシュすることによって機能します。

型オブジェクトが変更可能な場合 (つまり、メソッドが実行時に別のものにパッチされたサルである可能性がある場合)、型比較をどのように処理しますか?

私が思いついたアイデアの 1 つは、メソッドが調整されるたびにインクリメントされる「クラス カウンター」です。それらのメソッドが変更されていなくても、そのクラス。

この問題は JavaScript に直接当てはまり、大きな JavaScript 仮想マシンの 3 つすべてに PIC があることがわかっているため、これには適切な解決策があるに違いないと確信しています。

4

2 に答える 2

1

V8 では、モンキーパッチを適用すると、オブジェクトの「隠しクラス」(「マップ」は SELF 用語) が変更されると思います。それは、オブジェクト自体にパッチを適用したサルで機能します。

クラスにモンキー パッチを適用した場合 (JS でできますか?)、これはおそらくまれであるため、すべての PIC が無効になると思います。あるいは、古いメソッドを再コンパイルして、新しいメソッドに直接ディスパッチすることもできます (型チェックの後だと思います)。

余談ですが、実際には、他の「ビッグ 3」が PIC を使用しているとは思いません。squirrelfish と tracemonkey のことだと思います。前者は通訳者で、後者は追跡アプローチに焦点を当てています。私は PIC について何も聞いた覚えがありません。実際、tracemonkey がオブジェクトに対してまったくクールなことをしているとは思いませんが、間違っている可能性もあります。

于 2009-07-29T13:56:38.230 に答える