動的言語のオブジェクトは、なぜハッシュテーブルだけでは遅いのか

Objects, attributes, maps, oh my

PythonやRuby、JavaScriptではオブジェクトを名前と値のマッピングとして扱うが、毎回ハッシュテーブルを引くと遅い。そこで登場するのが「map」や「shape」と呼ばれる仕組みだ。属性の格納位置を小さな整数オフセットで表し、オブジェクト内に直接並べて保持する。さらにmapを不変な木構造として共有し、インラインキャッシュで「前回と同じmapか」をポインタ比較だけで判定できるようにする。CF Bolz-Tereickの実装を土台に、500行以内で全体像を掴める形にまとめている。

属性の順序は重要だ。aの次にbを追加するのと、bの次にaを追加するのでは、異なるshapeになる。

この日のほかの記事

2026-10-23