Schrittweise Typisierung
Schrittweise Typisierung ist ein Typ System in welchen etwas Variablen und Ausdrücke können Typen erhalten und die Richtigkeit der Typisierung wird untersucht Zeit kompilieren (welches ist statische Typisierung) und einige Ausdrücke können nicht typisch und eventuell gelassen werden Geben Sie Fehler ein werden bei Laufzeit (welches ist Dynamisches Typing). Durch die allmähliche Tippen können Softwareentwickler in einer einzelnen Sprache eines der beiden Typen Paradigma auswählen.[1] In vielen Fällen wird eine vorhandene dynamische Sprache allmähliche Tippen hinzugefügt, wodurch eine abgeleitete Sprache erstellt wird, die es ermöglicht, eine statische Typisierung zu verwenden, aber nicht erforderlich ist. In einigen Fällen verwendet eine Sprache von Anfang an eine schrittweise Eingabe.
Geschichte
Der Begriff wurde von Jeremy Siek geprägt. Jeremy Siek und Walid Taha begannen 2006 mit der Erforschung einer schrittweise Typisierung.[1]
Implementierung
Insbesondere die allmähliche Typierung verwendet einen speziellen Typ mit dem Namen dynamisch Um statisch unbekannte Typen darzustellen, und die allmähliche Typisierung ersetzt den Begriff der Typ-Gleichheit durch eine neue Beziehung genannt Konsistenz Das bezieht den dynamischen Typ auf jeden anderen Typ. Die Konsistenzbeziehung ist symmetrisch, aber nicht transitiv.[2]
Frühere Versuche zur Integration der statischen und dynamischen Typisierung versuchten, den dynamischen Typ sowohl oben als auch unten in der Subtyphierarchie zu gestalten. Allerdings, weil Subtyping ist transitiv, das führt dazu, dass jeder Typ mit jedem anderen Typ zusammenhängt, und so wird das Subtyp keine statischen Typfehler mehr ausschließen. Das Hinzufügen einer zweiten Phase der Plausibilitätsprüfung zum Typsystem hat dieses Problem nicht vollständig gelöst.[3][4]
Eine allmähliche Tippen kann leicht in das Typsystem einer objektorientierten Sprache integriert werden, die bereits verwendet wird Abonnement Regel, um implizit zuzulassen Upcasts in Bezug auf Subtyping. Die Hauptidee ist, dass Konsistenz und Subtypen orthogonale Ideen sind, die gut zusammenhängen. Fügen Sie einfach die Subsumption-Regel und fügen Sie eine subtypende Regel hinzu, die den dynamischen Typ zu einem Subtyp von sich selbst fügen, um eine subtypische Sprache hinzuzufügen, da das Subtypen reflexiv sein soll. (Aber machen Sie nicht die Oberseite der subtypenden Reihenfolge dynamisch!)[5]
Beispiele
Beispiele für allmählich typisierte Sprachen, die aus vorhandenen dynamisch typisierten Sprachen abgeleitet wurden Verschluss Compiler, Typoskript (für beide JavaScript[6]),[7] Hacken (für PHP), PHP (seit 7,0[8]), Getippter Schläger (für Schläger[9][10]) Tippte Clojure (für Clojure),[11] Cython (a Python Compiler), Mypy (Ein statischer Typ Checker für Python),[12] Scheiterhaufen (Alternative statische Typ -Checker für Python),[13] oder CPERL (ein Typed Perl 5). Aktionen ist eine allmählich getippte Sprache[14] Das ist jetzt eine Implementierung von ECMaskriptobwohl es ursprünglich als Geschwister getrennt auftrat, die beide von Apple beeinflusst wurden Hypertalk.
Ein System für die J Programmiersprache Es wurde entwickelt,[15] Hinzufügen von Zwang, Fehlerausbreitung und Filterung zu den normalen Validierungseigenschaften des Typsystems sowie Anwendungstypfunktionen außerhalb von Funktionsdefinitionen, wodurch die zunehmende Flexibilität der Typdefinitionen angewendet wird.
Umgekehrt, C# Begonnen als statisch typisierte Sprache, aber ab Version 4.0 wird allmählich eingegeben, sodass Variablen mithilfe der Variablen explizit als dynamisch markiert werden können dynamisch
Typ.[16] Allmählich typisierte Sprachen, die nicht aus einer dynamisch typisierten Sprache abgeleitet sind, umfassen Pfeil, Dylan, und Raku.
Raku (Früher Perl6) hat von Anfang an schrittweise implementiert. Typprüfungen treten an allen Stellen auf, an denen Werte zugewiesen oder gebunden werden. Eine "Untyped" Variable oder ein Parameter wird tippt als Irgendein
, die (fast) alle Werte übereinstimmen. Die Compiler Flags-Überprüfungskonflikte zum Kompilierenzeitpunkt, wenn er zur Kompilierung des Zeitpunkts feststellen kann, dass sie niemals erfolgreich sein werden.
Ziel c hat allmähliche Tippen für Objektzeiger in Bezug auf Methodenaufrufe. Die statische Eingabe wird verwendet, wenn eine Variable als Zeiger auf eine bestimmte Objektklasse eingegeben wird: Wenn ein Methodenaufruf an die Variable durchgeführt wird . Wenn jedoch eine Variable des Typs Ich würde
Wird der Compiler verwendet, ermöglicht jede Methode, die aufgerufen werden kann.
Das JS ++ Programmiersprache, veröffentlicht im Jahr 2011, ist ein Superset von JavaScript (dynamisch getippt) mit einem allmählichen Typsystem, das ist Klang zum ECMaskript und Dom API -Eckfälle.[17]
Verweise
- ^ a b Siek, Jeremy. "Was ist allmähliches Tippen?".
- ^ Siek, Jeremy; Taha, Walid (September 2006). Schrittweise Typisierung für funktionale Sprachen (PDF). Schema und funktionelle Programmierung 2006. Universität von Chicago. S. 81–92.
- ^ Thatte, Satish (1990). Quasi-statische Typisierung. Popl 1990: ACM -Prinzipien der Programmiersprachen. ACM. S. 367–381. doi:10.1145/96709.96747. ISBN 978-0897913430.
- ^ Oliart, Alberto (1994). Ein Algorithmus zum Abschluss von quasi-statischen Typen (Technischer Bericht). Boston Universität. 1994-013.
- ^ Siek, Jeremy; Taha, Walid (August 2007). Schrittweise Tippen für Objekte. ECOOP 2007: Europäische Konferenz über objektorientierte Programmierung. Vorlesungsnotizen in Informatik. Vol. 4609. Springer. S. 2–27. doi:10.1007/978-3-540-73589-2_2. ISBN 978-3-540-73588-5.
- ^ Feldhaus, Asger; Møller, Anders (2014). "Überprüfung der Korrektheit von Typscript -Schnittstellen für JavaScript -Bibliotheken". Verfahren der ACM International Conference 2014 über objektorientierte Programmiersysteme Sprachen und Anwendungen - OOPSLA '14. Portland, Oregon, USA: ACM Press: 1–16. doi:10.1145/2660193.2660215. ISBN 978-1-4503-2585-1.
- ^ Swamy, N.; Fournet, C.; Rastogi, a.; Bhargavan, K.; Chen, J.; Strub, P. Y.; Bierman, G. (2014). "Schrittweise typisieren sicher in javaScript eingebettet". Verfahren des 41. ACM Sigplan -Sigact -Symposiums über Prinzipien der Programmiersprachen - POPL '14 (PDF). S. 425–437. doi:10.1145/2535838.2535889. ISBN 9781450325448.
- ^ "PHP: Funktionsargumente - Handbuch» Strikte Tippen ".
- ^ Tobin-Hochstadt, Sam; Fellisen, Matthias. "Interanguage Migration: Von Skripten zu Programmen". Verfahren des Symposiums über objektorientierte Programmiersysteme, Begleitvolumen. Portland, oder. TOBIN-HOCHSTADT06. Abgerufen 2020-11-06.
- ^ Tobin-Hochstadt, Sam; Fellisen, Matthias. "Die Gestaltung und Implementierung des typisierten Schemas". Verfahren der Prinzipien der Programmiersprachen. San Diego, CA. TOBIN-HOCHSTADT08. Abgerufen 2020-11-06.
- ^ Chas Emerick. "Typed Clojure -Benutzerhandbuch".
- ^ Jukka lehtosalo. "Mypy - Optionales statisches Typing für Python".
- ^ "Pyre - ein Performantyp -Prüf für Python 3".
- ^ Asem Rastogi;Avik Chaudhuri;Basil Hosmer (Januar 2012). "Die Vor- und Nachteile allmählicher Typ -Inferenz" (PDF). Verband für Rechenmaschinen (ACM). Abgerufen 2014-09-23.
- ^ "Typ-System-J".
- ^ "Dynamisch (C# Referenz)". MSDN -Bibliothek. Microsoft. Abgerufen 14. Januar 2014.
- ^ "Das JS ++ -Stypsystem, Anhang B: Probleme (warum war das schwer zu lösen?)". Abgerufen 10. Februar 2020.
Weitere Lektüre
- Siek, Jeremy G.;Vitousek, Michael M.;Cimini, Matteo;Boyland, John Tang (2015).Ball, Thomas;Bodik, Rastislav;Krishnamurthi, Shriram;Lerner, Benjamin S.;Morrisett, Greg (Hrsg.). Raffinierte Kriterien für die schrittweise Typisierung. 1. Gipfel zu Fortschritten in Programmiersprachen (Snapl 2015).Leibniz International Proceedings in Informatics (Lipics).Vol.32. Dagstuhl, Deutschland: Schloss Dagstuhl-Leibniz-Zentrum Fuer Informatik.S. 274–293. doi:10.4230/lipics.snapl.2015.274. ISBN 9783939897804.