Eigentümertypen und Trennungslogik scheinen ähnliche Ziele zu haben: Kontrolle über Eigentümer und Aliasing. Vielleicht sollte ich auch hinzufügen: die Fähigkeit, modulare Spezifikationen zu schreiben.
Was ist über die Beziehung zwischen Besitzertypen und Trennungslogik bekannt?
Antworten:
Ich habe kürzlich eine Umfrage zu Eigentümertypen abgeschlossen und nur sehr wenig gefunden, das die Beziehung zwischen den beiden Themen behandelt. Die drei nächsten Artikel, auf die ich gestoßen bin, sind die folgenden, die seltsamerweise von derselben Konferenz stammen:
Yang Zhao und John Boyland. Eine grundlegende Berechtigungsinterpretation für Eigentumsarten. Im zweiten internationalen IEEE / IFIP-Symposium zu theoretischen Aspekten des Software-Engineerings, TASE 2008, 17.-19. Juni 2008, Nanjing, China. IEEE Computer Society, 2008., Seiten 65–72.
Shuling Wang, Luís Soares Barbosa und José Nuno Oliveira. Ein relationales Modell für begrenzte Trennungslogik. Im zweiten internationalen IEEE / IFIP-Symposium zu theoretischen Aspekten des Software-Engineerings, TASE 2008, 17.-19. Juni 2008, Nanjing, China. IEEE Computer Society, 2008., Seiten 263–270.
Shuling Wang und Zongyan Qiu. Ein generisches Modell für die Beschränkung und ihre Anwendung. Im zweiten internationalen IEEE / IFIP-Symposium zu theoretischen Aspekten des Software-Engineerings, TASE 2008, 17.-19. Juni 2008, Nanjing, China. IEEE Computer Society, 2008., Seiten 57–64.
Das erste Papier kodiert zwei Arten von Eigentümertypen, nämlich Eigentümer als Dominatoren und Eigentümer als Sperren, in Bezug auf die Teilberechtigungen von Boyland, die ein Fähigkeitssystem sind, das zum Überlegen von Programmen entwickelt wurde.
Das zweite Papier nimmt Beschränkungsideen auf, die denen ähneln, die in Besitzertypen verwendet werden, und fügt sie der Trennungslogik hinzu.
Das dritte Papier hat einen semantischen Ansatz entwickelt, der verwendet wird, um verschiedene Einschlussdisziplinen wie Eigentumsarten zu kodieren. Ich bin mir nicht sicher, ob ihr System auch die Trennungslogik abdeckt, und ich kann im Moment nicht darauf zugreifen. Ihr Ansatz ist eher ad hoc; Es kann als formeller und systematischer für ein Papier angesehen werden, das ich vor einiger Zeit mit James Noble und anderen geschrieben habe:
quelle
Ich verstehe den Unterschied so, dass Besitzertypen die Form des Objektgraphen einschränken und unterstrukturelle Systeme (wie die Trennungslogik) Berechtigungen für den Zugriff auf den Heap verwalten .
Im Gegensatz dazu beruhen substrukturelle Systeme wie lineare Typen und Trennungslogik auf der Idee von Ressourcen . Jede Region des Heaps ist eine Ressource. Wenn Sie die Ressource nicht besitzen, können Sie sie nicht berühren. Dies macht die Rahmenbedingungen sehr einfach: Sie halten immer.
Ein oberflächlicher Unterschied (der mich dennoch lange verwirrte) war, dass Besitzertypen Typen waren und Trennungslogik eine Programmlogik. Glücklicherweise haben die Eigentümer diese Ideen, obwohl sie in einer typentheoretischen Umgebung geboren wurden, auch auf die Programmlogik angewendet.
Die beiden wichtigsten theoretischen Arbeiten, die ich dazu kenne, sind Kassios 'Arbeiten zu dynamischen Rahmen , die Bannerjee und Naumann (und ihre Schüler) in ihrer Arbeit zur regionalen Logik systematisch genutzt haben .
Nach meinem Verständnis besteht ihr grundlegender Ansatz darin, die Hoare-Logik zu übernehmen und dann:
Jeder Ansatz hat Vor- und Nachteile.
Durch die Eigentümerschaft sind Frame-Eigenschaften wesentlich weniger bequem zu verwenden als bei substrukturellen Ansätzen, da Sie Frame-Bedingungen berechnen müssen.
Andererseits unterstützen Algorithmen auf DAGs hübschere induktive Beweise in einem Besitzstil, da Sie den Footprint von der Zeigerstruktur entkoppeln können. In einer Spezifikation im Trennungsstil besteht die natürliche Sache darin, eine induktive Invariante auf einem Spannbaum zu erzeugen. Aber wenn der Spanning Tree, den der Algorithmus berechnet, jemals anders ist als der, den Ihre Invariante hat, werden Sie in eine Welt voller Verletzungen geraten.
Mein allgemeiner Eindruck ist, dass die Trennung einfacher zu verwenden ist als das Eigentum, da wir für fast jeden Befehl in einem imperativen Programm Rahmeneigenschaften benötigen. (Dave Naumann argumentiert, dass die Regionslogik für die Automatisierung besser geeignet ist, da die Assertionslogik einfach alte FOL bleibt und Sie daher Standard-Theoremprüfer und SMT-Löser verwenden können.)
EDIT: Ich habe gerade das folgende Papier von Matt Parkinson und Alex Summers, Die Beziehung zwischen Trennungslogik und impliziten dynamischen Frames , gefunden, in dem sie behaupten, eine Logik zu geben, die die beiden Methoden vereint.
quelle