Мономорфизация
Способ реализации дженериков, при котором компилятор генерирует отдельную конкретную версию для каждого использованного типа.
Vec<i32> и Vec<String> — разные скомпилированные типы. Так делают Rust, C++ и Go (с 1.18). Плюс: никаких накладных расходов в рантайме (ни виртуальной диспетчеризации, ни боксинга), агрессивный инлайнинг и оптимизация. Минус: раздувание бинарника («template bloat» в C++), ведь каждое использование T компилируется отдельно.
Классическая боль Rust: serde-derive на сотне структур — и сборка занимает 30+ минут. Альтернатива — стирание типов (Java, TS) с единственной версией в рантайме. Если важен размер бинарника, в Rust есть trait-объекты (dyn Trait) с диспетчеризацией в рантайме. Измерять раздутие помогают cargo-bloat и llvm-strip.