Suchen

Definition „Type Safety“ Was ist Typsicherheit?

| Autor / Redakteur: HJL / Stephan Augsten

Typsicherheit ist eine qualitative Eigenschaft von Programmiersprachen. Diese „Type Safety“ oder auch „Type Soundness“ herzustellen, obliegt dem Interpreter respektive dem Compiler. Type Safety dient somit als Maß der Code-Qualität und Programm-Zuverlässigkeit bei der Software-Entwicklung.

Firma zum Thema

Im Zuge der Typprüfung gibt der C++-Compiler von Microsoft Warnmeldungen aus und nimmt Typkonvertierungen vor.
Im Zuge der Typprüfung gibt der C++-Compiler von Microsoft Warnmeldungen aus und nimmt Typkonvertierungen vor.
(Bild: docs.microsoft.com)

Der in der Informatik gebräuchliche Begriff der Typsicherheit, im englischen Fachjargon wahlweise Type Safety oder alternativ Type Soundness, ist dem Bereich der Programmiersprachen zuzuordnen. Es zählt zu den Aufgaben des Compilers oder Interpreters, diese Sicherheit durch Typprüfung herzustellen. und Typverletzungen durch Typumwandlung und Typerweiterung aufzufangen.

Zumindest einige Verletzungen lassen sich durch automatisierte Typumwandlung und Typerweiterung auffangen. In anderen Fällen wird hingegen eine Meldung ausgegeben. So würde beispielsweise ein C++-Compiler davor warnen, eine Gleitkommazahl (Float) an eine Ganzzahl-Variable (Integer) zu übergeben. Als gebräuchlicher Fachausdruck für den Arbeitsgang der Überprüfung verwendeter Datentypen hat sich der Begriff „Type Checking“ (Typ-Prüfung) etabliert.

Typsysteme für moderne, objektorientierte Programmiersprachen sind relativ komplex. Umso wichtiger ist die Forderung nach der Typsicherheit. Die Kernfrage aus der Perspektive des Programmierers lautet: „Können typkorrekte Programmierungen letztendlich erfolgreich ausgeführt werden?“

Erfahrene Programmierer sind mit den Besonderheiten der Vererbung in den Programmiersprachen C++ oder JavaScript vertraut. Deshalb wissen sie aus Erfahrung, dass selbst beispielsweise häufig genutzte C++ Compiler nicht davor gefeit sind, inkorrekten Code für „typkorrekt“ deklarierte Programme zu erzeugen. Im Umkehrschluss lässt sich feststellen, wie wichtig das Vertrauen in die Typsicherheit einer Programmiersprache ist. Sie bildet die Basis für die Verlässlichkeit bezüglich Sicherheit und Qualität der implementierten Applikationen.

Typisierung: Dynamisch versus Statisch

Bei Programmiersprachen unterscheidet der Markt bezüglich ihrer Typisierung in folgende Varianten:

Dynamische Typisierung

Typische Vertreter der Dynamik-Variante sind die Programmiersprachen JavaScript und Python. Charakteristisch für diese Spezies ist die Typprüfung erst während der Laufzeit. Manche Typen sind erst zur Laufzeit definitiv festgelegt. Der Vorteil aus der Sicht des Entwicklers besteht in einem hohen Maß an Flexibilität. Was sich auf der einen Seite vorteilhaft darstellt, kann zur Schwachstelle werden. Manche Fehler können analog erst zur Laufzeit erkannt werden.

Statische Typisierung

Bei der statischen Typisierung ist der Typ bereits zum Zeitpunkt der Kompilierung fest fixiert. Entsprechend frühzeitig greift die Fehler-Erkennung.

Fokus auf Typsicherheit bei neuen Programmiersprachen

Das Bedürfnis nach neuen und modernen Programmiersprachen korrespondiert mit der Anforderung nach hoher Typsicherheit. Sprachen neuerer Generationen orientieren sich an dieser Marktforderung nach einem hohen Maß an Typsicherheit. Dies bedeutet nicht zuletzt eine Abkehr von der dynamischen Typisierung und die zu erwartende Hinkehr zu Programmiersprachen mit statischer Typisierung.

Die Zahl der neu auf den Markt gekommenen Programmiersprachen zeigt dementsprechend einen klaren Trend auf: In den zurückliegenden zehn Jahren haben statisch typisierte Programmiersprachen ein hohes Wachstumstempo vorgelegt. Neuschöpfungen wie Go, Kotlin, Rust oder TypeScript gesellten sich zu den etablierten Programmiersprachen wie Python, JavaScript oder der aus dem Jahr 1972 stammenden Sprache C.

Im Sinne hoher Typsicherheit werden kurzfristig entstehende Nachteile in Kauf genommen. Bewusst nimmt man den höheren Aufwand sowie Einschränkungen hinsichtlich der Flexibilität in Kauf. Die langfristigen Vorteile haben mehr Gewicht:

  • mehr Kontrolle über den Programm-Code;
  • weniger Imponderabilien; das sind jene unvorhergesehenen Dinge, die zu Vertrauenseinbußen in Qualität und Sicherheit der Applikation führen können.

Schlussbetrachtung zur Typsicherheit

Typsicherheit ist der Optimal-Zustand einer Programm-Ausführung. Sie ist dann erreicht, wenn Datentypen ihrer Definition entsprechend in der gewählten Programmiersprache verwendet werden, ohne Typverletzungen auszulösen. Für die Typsicherheit sorgen Compiler bzw. Interpreter. Werden Typfehler und -verletzungen bis spätestens zur Laufzeit eines Programms entdeckt, so spricht man in der Informatik von „typsicheren Sprachen“.

(ID:46804502)