Generics
Parametric polymorphism — functions/types parameterized over types. Vec<T> works for T = String, T = i32, T = whatever. Standard since ML 1973; mainstream since Java 5 (2004), C++ templates (late 1990s), Rust, Go 1.18 (2022).
Two implementations: monomorphization (compile-time, one copy per concrete type — Rust, C++, Go), erasure (one runtime version, type info erased — Java, TypeScript). Trade-offs: monomorphization → faster runtime, larger binary. Erasure → smaller binary, less optimization potential. Bounded generics: fn sort<T: Ord> — requires T implements Ord trait. Higher-kinded types (HKT): generics-over-generics, exist in Haskell, Scala — missing in Rust/Go. Modern Go (1.18+) added generics after 13 years of resistance from Go team.