EMZETT.
Login

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> ein List<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