Statische Typüberprüfung


... [ Seminar "Programmierkonzepte und Programmiersprachen"] ... [ Inhaltsübersicht ] ... [ zurück ] ... [ weiter ]

Übersicht: Statische Typüberprüfung


Getypte und ungetypte Sprachen

Variablen nehmen während des Programmsverlaufs verschiedene Werte an. Der Wertebereich einer Variable nennt man Typ. Sprachen in denen Variablen (nichttriviale) Typen zugeordnet werden können, nennt man getypte Sprachen. Es gibt explizit und implizit getypte Sprachen. Bei explizit getypten Sprachen sind die Typen Teile der Syntax, bei impliziten nicht.
Sprachen, die den Wertebereich von Variablen nicht einschränken nennt man ungetypte Sprachen. Ungetypte Sprachen haben entweder keine Typen oder einen universellen Typ, in dem alle Werte zugelassen sind. Operationen können in diesen Sprachen auf nicht dafür vorgesehene Argumente verwendet werden. Das Resultat kann daraufhin je nach Sprache eine Exception, ein Fehler, ein beliebiger festgelegter Wert oder ein nichtspezifizierter Effekt sein. Das reine Lamda-Kalkül ist ein extremes Beispiel für eine ungetypte Sprache, in der es nie zu einem Typfehler kommt. Als einzige Operation sind Funktionsanwendungen zugelassen und da alle Werte nur Funktionen sind, wird es bei dieser Operation nie zu einen Fehler kommen.


Typsysteme

Typsysteme sind Bestandteile jeder getypten Sprache. Typsysteme spezifizieren die Regeln einer Programmiersprache und überwachen die Variablen und alle Ausdrücke eines Programms auf die Einhaltung derselbigen. Mit Hilfe von Typsystemen kann man bestimmen, ob ein Programm ein gutes Verhalten zeigt.


Laufzeitfehler

Laufzeitfehler kann man in 2 Kategorien aufteilen. Zum einen jene Fehler, die zum sofortigen Programmabbruch führen, zum anderen Fehler, die sich nicht sofort bemerkbar machen, bei denen aber zum Beispiel die Daten korrumpiert werden und es zu willkürlichen Verhalten kommt.
Die erste Art von Fehlern nennt man trapped error und die zweite Art folglich untrapped errors. Beispiele für untrapped errors sind Sprünge zu einer falschen Adresse oder der Zugriff auf Daten, die ausserhalb einer Array Grenze liegen(vorrausgesetzt, dass zur Laufzeit keine Indexüberprüfung stattfindet)
Beispiele für trapped Fehler sind division by zero oder der Zugriff auf eine illegale Adresse.
Ein Programm in denen keine untrapped errors auftreten nennt man sicher. Eine Programmiersprache in der keine untrapped Fehler auftauchen nennt man sichere Sprache.
Aus der Menge aller Laufzeitfehler kann man eine weitere Art von Fehlern definieren, die forbidden errors. Diese Art von Fehlern soll alle untrapped errors, sowie eine Untermenge der trapped errors enthalten. Ein Programm zeigt gutes Verhalten bzw. verhält sich gut, wenn keine forbidden errors auftreten. Diese Eigenschaft nennt man auch Typzuverlässigkeit.
Ein Programm zeigt hingegen schlechtes Verhalten bzw. verhält sich schlecht, falls untrapped errors auftreten.


Starke und schwache Typisierung

Eine Sprache in der alle legalen Programme gutes Verhalten zeigen, nennt man stark typisiert. Diese Sprachen zeichnen sich dadurch aus, dass:
- Keine untrapped errors auftauchen und damit Sicherheit garantiert wird.
- Keine der als forbidden deklarierten trapped errors zugelassen werden.
- Alle anderen trapped errors können auftauchen und der Programmierer muss selbst dafür sorgen, diese Fehler zu vermeiden.
Schwach typisiert werden Sprachen genannt, die unsichere Operationen zulassen. Dies ist der Fall, wenn man bei der forbidden errors Definition, nicht alle untrapped errors als forbidden errors deklariert. Der Grad der Schwäche einer Sprache kann stark variieren, und zwar in der Hinsicht, wie viele untrapped errors zugelassen werden. Pascal hat zum Beispiel nur wenige unsichere Operationen (Variante Records ohne Tag-Feld,Funktionsparameter), während in C viele unsichere Operationen zugelassen werden. (u.a. Zeigerarithmetik und casts)


Statische und dynamische Typüberprüfung

Werden Programme statisch zur Compilezeit auf gutes Verhalten getestet und somit die Ausführung von unsicheren bzw. sich schlecht verhaltenen Programmen verhindert, spricht man von einer statischen Typüberprüfung.
Dieser Test wird von der sogenannten Typüberprüfung durchgeführt. Ein Programm welches diesen Test besteht, wird gut getypt genannt.
Ungetypte Sprachen können gutes Verhalten und sogar Sicherheit eines Programms erzwingen, in dem zur Laufzeit detaillierte Tests durchgeführt werden. Die Durchführung dieser Tests nennt man dynamische Typüberprüfung.
Um die Sicherheit eines Programms zu garantieren, müssen auch Sprachen mit statischer Typüberprüfung dynamische Laufzeittests durchführen, um z.B. Array Grenzen zu Überprüfen.


... [ Seminar "Programmierkonzepte und Programmiersprachen"] ... [ Inhaltsübersicht ] ... [ zurück ] ... [ Seitenanfang ] ... [ weiter ]