単態化(monomorphization)

ジェネリクス(総称型)を実装する方式のひとつ。コンパイル時に、ジェネリックなコード(関数・構造体など)を実際に使われている具体型の組み合わせごとに複製し、型ごとに専用の機械語を生成する。

C++のテンプレート、Rustのジェネリクスがこの方式を採用している。対になる方式が辞書渡しで、両者はGoのジェネリクス実装(GC Shape Stenciling)が解決しようとした「Generic Dilemma」の両極をなす。

利点

  • 型ごとに専用コードが生成されるため、実行時の間接参照(辞書引き・vtable経由の呼び出しなど)が発生せず、実行速度が速い。
  • インライン化・定数畳み込みなど、コンパイラの最適化が型固有の情報を活かして効きやすい。

欠点

  • 使われる型の組み合わせの数だけコードが複製されるため、バイナリサイズが肥大化しやすい。
  • 型のネストが深い場合(ジェネリック型を引数に持つジェネリック関数など)、複製されるコード量が指数的に増えるおそれがある。
  • コンパイル時間が伸びる。

ジェネリクスの実装方式の中での位置づけ

辞書渡しと対をなす、もう一方の極として位置づけられる。

#generics #compiler-design

作成日時: 2026-08-15 21:28 / 更新日時: 2026-08-15 21:28