Typsysteme und Typinferenz
Kurz: Ein Typsystem prüft, dass Werte nur auf erlaubte Weise verwendet werden, etwa keine Zahl durch einen Text geteilt wird. Typinferenz lässt den Compiler Typen selbst erschließen.
Genauer: Statische Typen werden vor der Ausführung geprüft (Java, Rust, TypeScript), dynamische erst zur Laufzeit (Python, JavaScript). Starke Typsysteme finden viele Fehler früh. Generics, Sum-Types und Traits machen sie ausdrucksstark.
Im Detail
- Statisch vs. dynamisch; stark vs. schwach: Zwei getrennte Achsen.
- Typinferenz:
let x = 5→int. Basis: Hindley-Milner (ML, Haskell, Rust). - Generics (Parametrische Polymorphie):
List<T>für beliebige T. - Varianz: Wann ist
List<Katze>einList<Tier>? Kovarianz, Kontravarianz. - Algebraische Datentypen: Summen (entweder-oder) und Produkte (und). Mit Pattern Matching.
- Option/Maybe: Macht Null-Werte im Typ sichtbar und verhindert Null-Fehler.
- Gradual Typing: Typen nachträglich ergänzen (TypeScript, Python-Typhinweise).
- Typen als Dokumentation und Refactoring-Hilfe.
Siehe auch: Lexer, Parser und Syntaxbaum, Zwischendarstellung und Compiler-Optimierung