Ich beginne eine persönliche bibliografische Recherche über Algorithmen zur Typprüfung und möchte einige Tipps. Was sind die am häufigsten verwendeten Algorithmen, Strategien und allgemeinen Techniken zur Typprüfung?
Ich interessiere mich besonders für komplexe Algorithmen zur Typprüfung, die in weithin bekannten stark statisch typisierten Sprachen wie beispielsweise C ++, Java 5+, Scala oder anderen implementiert wurden. IE, Typüberprüfungsalgorithmen, die aufgrund der sehr einfachen Typisierung der zugrunde liegenden Sprache (wie Java 1.4 und niedriger) nicht sehr einfach sind.
Ich interessiere mich per se nicht für eine bestimmte Sprache X, Y oder Z. Ich interessiere mich für Algorithmen zur Typprüfung, unabhängig von der Sprache, auf die sie abzielen. Wenn Sie eine Antwort wie "Sprache L" eingeben, von der Sie noch nie gehört haben, welche stark getippt ist, und die Eingabe komplex ist, verfügt sie über einen Typprüfungsalgorithmus, der A, B und C durch Prüfen von X und Y mit dem Algorithmus Z "oder" the "ausführt Strategie X und Y für Scala und eine Variante Z von A für C # sind cool, weil die Funktionen R, S und T so funktionieren ", dann sind die Antworten schön.
quelle
Antworten:
Die meisten Forschungen veröffentlichen die Algorithmen zur Typprüfung für vollständige Programmiersprachen nicht. Sie werden einige Formalisierungen eines großen Teils der Typsysteme für vollständige Programmiersprachen finden, wie die Arbeit von Drossopoulou und Eisenbach für Java oder die Arbeit von Nipkov et al in C ++ . Häufiger werden Sie jedoch nur die Typsysteme für einen Kernteil der Sprache finden (ein Beispiel ist Featherweight Java) oder für die Kernkonzepte einer Sprache wie den lokalen Typinferenzansatz von scala .
In Konferenzen wie POPL und ICFP finden Sie viele Algorithmen zur Typprüfung für bestimmte Arten von Typsystemen sowie neuartige Ansätze wie bidirektionale und tridirektionale Typprüfung.
Im Allgemeinen müssen Sie wahrscheinlich über den Damas-Milner-Algorithmus , die lokale Typinferenz, die bidirektionale und die tridirektionale Typprüfung Bescheid wissen und von dort aus erweitern, indem Sie den Referenzen in den Artikeln folgen und Google Scholar verwenden, um herauszufinden, welche Artikel diese zitieren und darauf aufbauen die beschriebenen Ansätze. Wie oben vorgeschlagen, haben Konferenzen wie POPL, ICPF, ESOP und sogar ECOOP und OOPSLA Papiere, die für Ihre Suche relevant sind.
quelle
Ein grundlegendes Werkzeug sind Attributgrammatiken . Sie werden vielleicht nicht in der Lage sein, alle bösen Dinge, die Sie sich vorstellen können, mit ihnen zu tun, aber sie sind ein guter Ausgangspunkt.
Im Wesentlichen können Sie den abstrakten Syntaxbaum eines Programms von oben nach unten und / oder von unten nach oben durchgehen und Informationen weitergeben. So können Sie beispielsweise globale Informationen zum Gültigkeitsbereichstyp (z. B. Klassen und ihre Mitglieder) nach unten übergeben und die Art der Ausdrücke rekursiv bestimmen, dh von unten nach oben, und die resultierenden Typen nach oben übergeben.
Erklärungen und Beispiele finden Sie in den Folien hier (Kapitel 5).
quelle