Generics
Parametrischer Polymorphismus — Funktionen und Typen, die über Typen parametrisiert sind. Vec<T> funktioniert für T = String, T = i32, T = was auch immer. Standard seit ML 1973; mainstream seit Java 5 (2004), C++-Templates (späte Neunziger), Rust, Go 1.18 (2022).
Zwei Umsetzungen: Monomorphisierung (zur Kompilierzeit, eine Kopie pro konkretem Typ — Rust, C++, Go) und Erasure (eine Laufzeitversion, Typinformationen gelöscht — Java, TypeScript). Kompromisse: Monomorphisierung bringt schnellere Laufzeit, aber größere Binaries. Erasure bringt kleinere Binaries, aber weniger Optimierungspotenzial. Bounded Generics wie fn sort<T: Ord> verlangen, dass T das Ord-Trait implementiert. Higher-Kinded Types (HKT), also Generics über Generics, gibt es in Haskell und Scala — sie fehlen in Rust und Go. Modernes Go (1.18+) fügte Generics erst nach 13 Jahren Widerstand des Go-Teams hinzu.