コンパイラ性能の鍵:Dense Arena Internerで文字列比較を整数比較に置き換える
Dense Arena Interning: The Engine of Compiler Performance
コンパイラはソースコード内の名前や構造を何度も照合するため、パフォーマンスのボトルネックになりがちです。この記事では、文字列や構造体を生成時に連続した整数(Dense ID)へ変換する「Dense Arena Interner」の実装を解説します。Arenaアロケータによるメモリの安定確保とハッシュマップを組み合わせることで、字句解析以降のフェーズではO(1)の配列インデックスやポインタ比較だけで処理できるようになります。字句解析、シンボルテーブル、型チェックなどでの具体的な高速化手法と、キャッシュ局所性やメモリ効率の向上についても説明します。
Internerは、文字列や複雑な型構造などのデータを重複排除し、それぞれに連続した0から始まる整数(0, 1, 2...)を割り当てます。