Definition
Ein formales Regelwerk und Mengenbeziehungen in einer Programmiersprache, das Ausdrücken Typen zuweist und einschränkt, wie diese Typen kombiniert werden dürfen, mit dem Ziel, bestimmte Fehlerklassen zu erkennen und ein sicheres Schließen über Programmverhalten zu ermöglichen.
Prinzip
Prinzip
Definiere eine Typgrammatik und Typisierungsjudgements (Regeln), sodass jedem Ausdruck ein Typ zugeordnet oder als untypisierbar gezeigt werden kann; Typisierungsregeln dienen dazu, Invarianten durchzusetzen (z. B. Integer nicht als Funktion anwenden) und Optimierungen sowie Abstraktionssicherheit zu unterstützen.
Demonstration
Demonstration
Ein statisches Typsystem mit Subtyping (z. B. objektorientierte Sprachen) stellt sicher, dass ein Wert eines Subtyps dort verwendet werden darf, wo ein Supertyp erwartet wird; ein Hindley–Milner-ähnliches System führt Typinferenz durch, um dem Ausdruck ohne Annotationen den allgemeinsten polymorphen Typ zuzuweisen.
Fehlanwendung
Fehlanwendung
Anzunehmen, ein Typsystem garantiere allein die Korrektheit eines Programms in allen Belangen (es garantiert nur jene Eigenschaften, die durch seine Regeln bewiesen werden, z. B. Typensicherheit) oder syntaktische Typannotationen mit semantischen Verträgen gleichzusetzen (Laufzeitprüfungen können weiterhin nötig sein).
Konsequenz
Konsequenz
Richtig angewendet verhindert ein Typsystem ganze Klassen von Fehlern (Typfehler, bestimmte Speicherfehler), dokumentiert beabsichtigte Nutzung durch Typen, ermöglicht frühere Fehlererkennung und eröffnet Chancen für Compiler-Optimierungen und sicherere APIs.
Umkehrung
Umkehrung
Eine untypisierte oder dynamisch typisierte Perspektive behandelt Typen als Laufzeitbeschreiber oder bloße Annotationen des Programmierers; die Umkehr betont Laufzeitprüfungen und flexible Komposition auf Kosten statischer Garantien.
Abgrenzung
Abgrenzung
Bezieht sich auf sprachliche Typregeln und deren Metatheorie (Soundness, Vollständigkeit, Entscheidbarkeit); schließt Maschinwortgrößen, Laufzeitwertrepräsentationen und Verhaltenseigenschaften, die nicht im Typsystem ausdrückbar sind, aus, sofern das Typsystem nicht erweitert wird (abhängige Typen, Refinement-Typen).
Semantische Spannung
Semantische Spannung
Spannung besteht zwischen statischer und dynamischer Typisierung und zwischen expressiven Typsystemen (abhängige/refinement-Typen), die mehr Programmeigenschaften kodieren können, und einfachen, entscheidbaren Systemen; Abwägungen zwischen Expressivität, Entscheidbarkeit und Programmierergonomie sind zentral.
Synthese
Synthese
Ein Typsystem ist der formale Mechanismus, der Ausdrücke klassifiziert und Kompositionsregeln erzwingt; es ermöglicht statisches Schließen über Programme und reduziert bestimmte Laufzeitfehlerklassen, während es Expressivität, Entscheidbarkeit und Praktikabilität austariert.