| Die Artikel Typsystem und Typisierung (Informatik) überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Bitte äußere dich in der Diskussion über diese Überschneidungen, bevor du diesen Baustein entfernst. 92.229.100.244 18:03, 24. Okt. 2008 (CEST) |
Der Begriff Typsystem bezeichnet in der Informatik eine Komponente, die in Programmiersprachen zum Einsatz kommen kann, um den Wertebereich von Variablen einzuschränken. Programmiersprachen, die über ein Typsystem verfügen, nennt man typisiert. Je nach Ausprägung des Typsystems spricht man gelegentlich auch von stark typisierten oder schwach typisierten Sprachen. Durch die Typisierung soll sichergestellt werden, dass auf den Inhalten von Variablen keine Operationen ausgeführt werden, die syntaktisch oder semantisch fehlerhaft sind.
Eine abstraktere Definition ist:
Inhaltsverzeichnis |
Ein Typsystem wird durch folgende Bestandteile gebildet:
Typprüfungen können zur Übersetzungszeit oder zur Laufzeit vorgenommen werden. Im ersten Fall spricht man von statischer Typprüfung, im zweiten von dynamischer Typprüfung. Grundsätzlich sind statische Typprüfungen wünschenswert, da sie Laufzeitfehler ebenso wie möglicherweise schwer auffindbare Folgefehler ausschließen. Strikte statische Typprüfungen verhindern jedoch immer auch Programmcode, der eigentlich typkorrekt ist, wie das folgende triviale Beispiel zeigt:
if (false) {
int i = "irgendein Text";
}
Dieser Code (einer gedachten Programmiersprache) ist typkorrekt, da er niemals zu einer problematischen Zuweisung führen kann. Dennoch würde eine statische Typprüfung die Zuweisung eines Strings an eine Integer-Variable normalerweise als Typfehler auffassen und zur Übersetzungszeit scheitern lassen. Es lässt sich leicht überlegen, dass in weniger zugespitzten Fällen Programmcode vom Typsystem zurückgewiesen wird, obwohl er nachweislich typkorrekt ist. Das Typsystem müsste eine erhebliche Komplexität erreichen, um das Laufzeitverhalten von Programmen bei den Typprüfungen zu berücksichtigen, was umgekehrt das Typsystem komplexer und schwerer handhabbar (und damit anfälliger für Fehlverwendungen durch den Programmierer) machen würde. Typsysteme sind daher immer Kompromisse zwischen möglichst strikten statischen Prüfungen und einer die Flexibilität und Ausdrucksstärke der Sprache bewahrenden dynamischen Prüfung.
Zu den Aufgaben eines Typsystems gehören: