Monomorphization

"Compile-time process where polymorphic functions are replaced by many monomorphic functions for each unique instantiation." -- Wikipedia

"The code that results from monomorphization is doing static dispatch, which is when the compiler knows what method you're calling at compile time." -- The Book

Before monomorphization

fn id<T>(x: T) -> T {
    x
}

fn main() {
    let int_id = id(10);
    let f32_id = id(1.1_f32);
    let string_id = id("hello");
    println!("{}", int_id);
    println!("{}", f32_id);
    println!("{}", string_id);
}

After Monomorphization

Rust might generate monomorphic functions with different naames.

fn id_i32(x: i32) -> i32 {
    x
}

fn id_f32(x: f32) -> f32 {
    x
}

fn id_str(x: &str) -> &str {
    x
}

fn main() {
    let int_id = id_i32(10);
    let f32_id = id_f32(1.1_f32);
    let string_id = id_str("hello");
    println!("{}", int_id);
    println!("{}", f32_id);
    println!("{}", string_id);
}