単相化(モノモーフィゼーション)
ジェネリクスの実装方式の一つで、コンパイラが使用される型ごとに具体的な型の版を別々に生成する。Vec<i32>とVec<String>は別々にコンパイルされた型になる。Rust、C++、Go(1.18以降)が採用している。
利点は実行時のオーバーヘッドがないこと(仮想ディスパッチもボックス化も不要)で、積極的なインライン化と最適化が効く。欠点はバイナリサイズの膨張で、C++では「テンプレート肥大化」と呼ばれる。Rustでは、100個の構造体にserde-deriveを使うとコンパイルに30分以上かかる、というのが定番の悩みである。実行時に一つの版だけを生成する型消去(JavaやTypeScript)とは対照的である。バイナリサイズが重要なら、Rustのトレイトオブジェクト(dyn Trait)で任意に動的ディスパッチを選べる。肥大化の計測と削減にはcargo-bloatやllvm-stripが使われる。