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.