- Strenge Typisierung
-
Starke Typisierung (engl. strong typing, daher oft auch strenge Typisierung) bezeichnet ein Schema der Typisierung von Programmiersprachen.
Bei der starken Typisierung bleibt eine einmal durchgeführte Bindung zwischen Variable und Datentyp bestehen, es wird auch (möglichst) keine implizite Typkonvertierung vorgenommen. Das Konzept der starken Typisierung ist nicht eindeutig definiert. In der Literatur finden sich diverse Regeln, die sich teilweise widersprechen. Versucht man alle bisher in der Literatur aufgestellten Regeln für starke Typisierung auf bekannte Programmiersprachen anzuwenden, hält keine Sprache dieser Überprüfung stand:
Eine Sprache ist stark typisiert, wenn
- Datentypen an Variablennamen anstatt an diskrete Werte geknüpft sind - die passende Terminologie dafür wäre statische Typisierung (static typing) im Gegensatz zur dynamischen Typisierung (dynamic typing);
- sie Typüberprüfungen zur Compile-Zeit enthält;
- automatische oder implizite Typkonvertierungen verboten sind;
- Typkonvertierungen explizit durchgeführt werden müssen;
- die Sprache keine Mechanismen besitzt, um das Typ-System zu umgehen, etwa type casts (Typumwandlungen) in C;
- es ein komplexes, fein abgestuftes System an Typen mit Sub-Typen gibt;
- der Datentyp eines Objektes fix ist und sich während der gesamten Lebensdauer des Objektes nicht verändern kann (auch diese Eigenschaft wird oftmals statische Typisierung genannt);
- das Typ-System das Laufzeitverhalten eines Programmes garantieren kann.
Vorteile durch starke Typisierung
Der entscheidende Vorteil der starken Typisierung ist, dass schon beim Übersetzen des Quellcodes eine Überprüfung der Zulässigkeit von Operationen durchgeführt wird. Daher ist nach dem erfolgreichen Kompilieren bereits gewährleistet, dass zum Beispiel Fehler, die auf der unzulässigen Typkonvertierung oder der Bereichsüberschreitung bei Datenfeldern beruhen, ausgeschlossen sind. Die zusätzliche Rechenzeit, die dafür erforderlich ist, spielt bei modernen Rechenmaschinen in der Regel keine Rolle. Daher ist es im Hinblick auf die Zuverlässigkeit und Sicherheit von Software nur bei extrem rechenintensiven Programmen sinnvoll, die starke Typisierung nicht zu berücksichtigen.
Wenn Typkonvertierungen zum Beispiel von ganzzahligen Typen nach Gleitkommatypen explizit angegeben und durchgeführt werden müssen, ist der Laufzeitaufwand, der eine solche Konvertierung darstellt, im Programm direkt zu erkennen.
Beispiele
Stark typisierte Sprachen (Keine der genannten Sprachen genügt allen Definitionen):
- Ada
- C# (solange die Option /unsafe nicht verwendet wird)
- Component Pascal (erfüllt alle oben angegebenen Kriterien, wenn das Modul SYSTEM nicht explizit importiert wird)
- D
- Haskell
- Java
- Python (keine Bindung zwischen Variable und Datentyp)
Schwach typisierte Sprachen:
Wikimedia Foundation.