Lexique informatique › Programmation › Monomorphisation

Monomorphisation

Programmation Svenska → Mis à jour: 2026-09-24

Implémentation des génériques où le compilateur génère une version concrète distincte pour chaque usage. Vec<i32> et Vec<String> sont deux types compilés différents. Rust, C++ et Go (depuis 1.18, sous une forme hybride) suivent cette approche.

Avantage : aucun surcoût à l'exécution (ni dispatch virtuel ni boxing), tout est inliné et optimisé sans retenue. Inconvénient : explosion de la taille du binaire (le « template bloat » du C++), puisque chaque usage de T est compilé séparément. Douleur classique en Rust : serde-derive sur 100 structs, et voilà plus de 30 minutes de compilation. À distinguer de l'effacement de types (Java, TS), qui ne génère qu'une seule version à l'exécution. Les trait objects Rust (dyn Trait) offrent un dispatch dynamique optionnel quand la taille du binaire compte. Outils Rust modernes pour mesurer et réduire le bloat : cargo-bloat, llvm-strip.

← Retour au lexique