Rozumiem różnicę: typy własności ograniczają kształt wykresu obiektowego , a systemy podstrukturalne (takie jak logika separacji) zarządzają uprawnieniami dostępu do stosu .
oreoreoreore
Z kolei systemy podstrukturalne, takie jak typy liniowe i logika separacji, polegają na idei zasobów . Każdy region sterty jest zasobem, a jeśli go nie posiadasz, nie możesz go dotknąć. Dzięki temu warunki kadru są bardzo łatwe: zawsze się trzymają.
Jedną powierzchowną różnicą (która jednak długo mnie myliła) było to, że typy własności były typami, a logika separacji była logiką programu. Na szczęście, podczas gdy typy własności rodziły się w środowisku teoretycznym, ludzie zastosowali te pomysły również w logice programowej.
Dwa główne prace teoretyczne, które znam na ten temat, to praca Kassiosa na temat dynamicznych ram , które Bannerjee i Naumann (i ich uczniowie) systematycznie wykorzystują w swojej pracy nad logiką regionalną .
Jak rozumiem, ich podstawowym podejściem jest przyjęcie logiki Hoare'a, a następnie:
- Dodaj nowy typ zmiennych regionu, których używasz do kojarzenia obiektów i regionów.
- Dodaj układ efektów do logiki Hoare, aby śledzić regiony odczytuje i zapisuje dotyk.
- Użyj efektów, aby ustalić, czy asercja jest zgodna z ramką, czy nie. Jeśli tak, możesz to wrobić, a jeśli nie, nie możesz.
Każde podejście ma zalety i wady.
Własność sprawia, że właściwości ramki są znacznie mniej wygodne w użyciu niż w podejściach podkonstrukcyjnych, ponieważ trzeba obliczyć warunki ramki.
Z drugiej strony algorytmy w DAG obsługują ładniejsze dowody indukcyjne w stylu własności, ponieważ można oddzielić ślad od struktury wskaźnika. W specie w stylu separacji naturalną rzeczą jest nadanie indukcyjnego niezmiennika na drzewie rozpinającym. Ale jeśli drzewo rozpinające, które oblicza algorytm, jest zawsze inne niż drzewo niezmiennika, czeka cię świat bólu.
W moim ogólnym odczuciu separacja jest łatwiejsza w użyciu niż własność, ponieważ potrzebujemy właściwości ramki dla prawie każdego polecenia w programie imperatywnym. (Dave Naumann argumentuje, że logika regionu jest bardziej podatna na automatyzację, ponieważ logika asercji pozostaje zwykłym starym FOL, a więc można używać gotowych dowodów twierdzeń i solverów SMT).
EDYCJA: Właśnie znalazłem następujący artykuł Matta Parkinsona i Alexa Summersa, The Relation between Separation Logic and Implicit Dynamic Frames , w którym twierdzą, że podają logikę łączącą obie metody.