Monomorphization is the process where the Rust compiler generates a separate, concrete version of a generic function or struct for each specific type used at compile time. Instead of passing type information at runtime, the compiler replaces the generic placeholder T with the actual type (like i32 or char) to create optimized, type-specific code. For example, calling largest with a slice of i32 and a slice of char results in two distinct functions in the final binary, one for each type.
fn largest<T: PartialOrd>(list: &[T]) -> &T {
let mut largest = &list[0];
for item in list {
if item > largest {
largest = item;
}
}
largest
}
// Compiler generates: largest_i32 and largest_char
let max_i32 = largest(&[1, 2, 3]);
let max_char = largest(&['a', 'b', 'c']);