Statische und dynamische Typisierung
Die statische Typisierung prüft Typen, bevor ein Programm ausgeführt wird, während die dynamische Typisierung sie während der Ausführung prüft; die graduelle Typisierung versucht, beides in einer Sprache zu kombinieren.
Definition
Die statische Typisierung überprüft Typbeschränkungen zur Kompilierungszeit, sodass korrekt typisierte Programme vor der Ausführung akzeptiert werden; die dynamische Typisierung verschiebt Typenprüfungen auf die Laufzeit und löst Fehler aus, wenn Operationen auf Werte ungeeigneten Typs angewendet werden.
Scope
Dieses Thema behandelt das Spektrum, wann und wie die Typenprüfung erfolgt: statische Prüfung, die fehlerhaft typisierte Programme zur Kompilierungszeit ablehnt, dynamische Prüfung, die Typfehler zur Laufzeit erkennt, und graduelle oder optionale Typisierung, die das Nebeneinander beider ermöglicht. Es werden die Garantien, die Flexibilität und die Leistungsimplikationen jeder Methode sowie die Korrektheit der Typisierungsdisziplin behandelt.
Core questions
- Welche Fehlerklassen verhindert die statische Prüfung, die die dynamische Prüfung nicht im Voraus verhindern kann?
- Welche Flexibilität bietet die dynamische Typisierung und zu welchem Preis?
- Wie kann die graduelle Typisierung typisierten und untypisierten Code korrekt mischen?
- Wie wird die Korrektheit einer statischen Typisierungsdisziplin festgestellt?
Key theories
- Graduelle Typisierung
- Siek und Taha definierten ein Typsystem, das es ermöglicht, Teile eines Programms statisch und andere dynamisch zu typisieren, wobei eine Konsistenzbeziehung die sichere Interaktion an der Grenze regelt.
- Korrektheit statischer Typen
- Die Progress-and-Preservation-Methode von Wright und Felleisen zeigt, dass ein korrektes statisches Typsystem garantiert, dass korrekt typisierte Programme niemals in festgefahrene Zustände geraten, wodurch die Sicherheit der statischen Prüfung formalisiert wird.
Clinical relevance
Die Wahl zwischen statischer und dynamischer Typisierung prägt den Entwickler-Workflow, die Werkzeuge und die Zuverlässigkeit. Graduelle und optionale Typisierungssysteme, wie sie auf dynamische Sprachen aufgesetzt werden, ermöglichen es Teams, statische Garantien schrittweise zu großen bestehenden Codebasen hinzuzufügen.
History
Frühe Sprachen teilten sich in statisch typisierte (Algol, Pascal, ML) und dynamisch typisierte (Lisp, Smalltalk) Linien auf. Als dynamische Sprachen aufgrund ihrer Produktivität populär wurden, suchten Forscher nach einer Versöhnung der Ansätze; Siek und Tahas graduelle Typisierung von 2006 und zeitgenössische Arbeiten zu optionalen Typen führten zu weit verbreiteten graduell typisierten Systemen, die auf dynamischen Sprachen aufbauen.
Debates
- Kosten und Korrektheit der graduellen Typisierung
- Forscher diskutieren, ob eine korrekte graduelle Typisierung prohibitive Laufzeitprüfkosten an typisierten/untypisierten Grenzen vermeiden kann und ob eine inkorrekte 'optionale' Typisierung ein besserer praktischer Kompromiss ist.
Key figures
- Benjamin Pierce
- Jeremy Siek
- Walid Taha
- Matthias Felleisen
Related topics
Seminal works
- pierce2002
- siek2006
- wright1994
Frequently asked questions
- Ist statische Typisierung immer besser als dynamische Typisierung?
- Keine ist universell besser; statische Typisierung fängt mehr Fehler frühzeitig ab und unterstützt Werkzeuge, während dynamische Typisierung Flexibilität und schnellere Prototypenentwicklung bietet. Die richtige Wahl hängt daher von den Zuverlässigkeits- und Agilitätsanforderungen des Projekts ab.
- Was ist graduelle Typisierung?
- Graduelle Typisierung ermöglicht es einem einzelnen Programm, statisch und dynamisch typisierte Abschnitte zu mischen, wobei Laufzeitprüfungen an den Grenzen eingefügt werden, sodass typisierter Code seine Garantien behält, während untypisierter Code flexibel bleibt.