Typsystem


Typsystem
Redundanz Die Artikel Typsystem und Typisierung (Informatik) überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Beteilige dich dazu an der Diskussion über diese Überschneidungen. Bitte entferne diesen Baustein erst nach vollständiger Abarbeitung der Redundanz. 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:

[A type system is a] tractable syntactic method for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute.
(Benjamin C. Pierce)

Inhaltsverzeichnis

Komponenten

Ein Typsystem wird durch folgende Bestandteile gebildet:

  • Die Typen selbst, die entweder mittels Typdefinitionen erzeugt oder in der jeweiligen Sprache fest integriert (als primitive Datentypen) sind.
  • Die Möglichkeit, Programmelemente (wie Variablen, Methodenparameter usw.) mittels Typannotation mit einem bestimmten Typ zu deklarieren.
  • Regeln, nach denen die Werte von Ausdrücken einem bestimmten Typ zugeordnet werden.
  • Regeln zur Prüfung der Typkorrektheit von Zuweisungen.
  • Optional weitere Sprachbestandteile wie typbezogene Operatoren (z. B. "instanceof" in diversen Sprachen) oder eine Reflection API zur Ermittlung und Prüfung von Typinformation zur Laufzeit.

Statische und dynamische Typprüfung

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.

Aufgaben

Zu den Aufgaben eines Typsystems gehören:

  • Erkennung von Typverletzungen bei der Übersetzung und Ausführung. Die Typinformation kann dabei als eine redundante Information aufgefasst werden, die verhindert, dass Variablen Werte zugewiesen werden, welche die betreffende Variable niemals annehmen sollte (sogenannte Typinvarianten). Sie verhindert so die Ausführung von Operationen auf den Inhalten dieser Variablen, die entweder unmöglich oder aus programmlogischen Gründen nicht sinnvoll ist.
  • Typumwandlung (engl. type conversion), also Umwandlung bzw. Beförderung und Degradierung von Typen (engl. type promotion, type demotion). In vielen objektorientierten Sprachen stehen hierfür die drei Möglichkeiten up cast, down cast und cross cast zur Verfügung.

Siehe auch

Literatur

  • Cardelli, Luca: Type Systems in The Computer Science and Engineering Handbook, Allen B. Tucker (Ed.), chapter 103, pp. 2208-2236, CRC Press, Boca Raton, FL, 1997. (online)
  • Pierce, Benjamin: Types and Programming Languages, MIT Press, 2002

Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Generation language — Quelltext eines Programms in der objektorientierten Programmiersprache Ruby. Eine Programmiersprache ist eine Notation für Computerprogramme; sie dient sowohl dazu, diese während und nach ihrer Entwicklung (Programmierung) darzustellen als auch… …   Deutsch Wikipedia

  • Funktionale Programmiersprache — Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung. Funktionale Programmierung ist ein Programmierparadigma. Programme… …   Deutsch Wikipedia

  • Funktionionale Programmierung — Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung. Funktionale Programmierung ist ein Programmierparadigma. Programme… …   Deutsch Wikipedia

  • Schwache Typisierung — Die Artikel Typsystem und Typisierung (Informatik) überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Beteilige dich dazu an der Diskussion über diese Überschneidungen. Bitte entferne diesen… …   Deutsch Wikipedia

  • Typkonzept — Die Artikel Typsystem und Typisierung (Informatik) überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Beteilige dich dazu an der Diskussion über diese Überschneidungen. Bitte entferne diesen… …   Deutsch Wikipedia

  • Funktionale Programmierung — ist ein Programmierstil, bei dem Programme ausschließlich aus Funktionen bestehen. Dadurch werden die aus der imperativen Programmierung bekannten Nebenwirkungen vermieden. Die funktionale Programmierung entspringt der akademischen Forschung. In… …   Deutsch Wikipedia

  • Programmiersprache — Quelltext eines Programms in der Programmiersprache C++. Eine Programmiersprache ist eine formale Sprache, die zur Formulierung von Computerprogrammen verwendet wird. Die Anweisungen (Befehle) können dabei entweder in Maschinencode geschrieben… …   Deutsch Wikipedia

  • Typisierung (Informatik) — Eine Typisierung (engl. typing) dient in der Informatik dazu, dass die Objekte (hier Objekte im mathematisch abstrakten Sinne verstanden) der Programmiersprachen, wie z. B. Variablen, Funktionen oder Objekte (im Sinne der objektorientierten… …   Deutsch Wikipedia

  • Typableitung — Durch Typinferenz kann in manchen (stark typisierten) Programmiersprachen viel Schreibarbeit eingespart werden, indem auf die Niederschrift von Typangaben verzichtet wird, die aus den restlichen Angaben und den Typisierungsregeln hergeleitet… …   Deutsch Wikipedia

  • Aldor — ist eine Programmiersprache, die hauptsächlich im Umfeld von Computeralgebrasystemen verwendet wird. Inhaltsverzeichnis 1 Geschichte 2 Spracheigenschaften 2.1 Typsystem 3 Lizenz …   Deutsch Wikipedia