Il modo in cui capisco la differenza è che i tipi di proprietà vincolano la forma del grafico a oggetti e che i sistemi sottostrutturali (come la logica di separazione) gestiscono le autorizzazioni per accedere all'heap .
odododod
Al contrario, i sistemi sottostrutturali come i tipi lineari e la logica di separazione si basano sull'idea delle risorse . Ogni regione dell'heap è una risorsa e se non si possiede la risorsa non è possibile toccarla. Questo rende le condizioni del telaio molto facili: tengono sempre.
Una differenza superficiale (che tuttavia mi ha confuso a lungo) era che i tipi di proprietà erano tipi e la logica di separazione era una logica di programma. Fortunatamente, mentre i tipi di proprietà sono nati in un'impostazione teorica dei tipi, le persone hanno applicato queste idee anche per programmare le logiche.
I due principali lavori teorici che conosco sono il lavoro di Kassios su frame dinamici , che Bannerjee e Naumann (e i loro studenti) hanno sistematicamente sfruttato nel loro lavoro sulla logica regionale .
A quanto ho capito, il loro approccio di base è prendere la logica Hoare e quindi:
- Aggiungi un nuovo tipo di variabili di regione, che puoi utilizzare per associare oggetti e regioni.
- Aggiungi un sistema di effetti alla logica Hoare per tracciare le regioni che legge e scrive il tocco.
- Usa gli effetti per determinare se un'asserzione rispetta o meno il frame. Se lo è, puoi inquadrarlo e, in caso contrario, non puoi.
Ogni approccio ha vantaggi e punti deboli.
La proprietà rende le proprietà della trama significativamente meno convenienti da usare rispetto agli approcci strutturali, poiché è necessario calcolare le condizioni della trama.
D'altro canto, gli algoritmi sui DAG supportano prove induttive più belle in uno stile proprietario, poiché è possibile separare l'impronta dalla struttura del puntatore. In una specifica in stile separazione, la cosa naturale è dare un invariante induttivo su un albero che si estende. Ma se l'albero di spanning che l'algoritmo calcola è sempre diverso da quello che ha il tuo invariante, ti trovi in un mondo di dolore.
Il mio senso generale è che la separazione è più facile da usare della proprietà, poiché abbiamo bisogno di proprietà frame per quasi tutti i comandi di un programma imperativo. (Dave Naumann sostiene che la logica di regione è più suscettibile all'automazione, poiché la logica di asserzione rimane semplicemente vecchia FOL, e quindi è possibile utilizzare dimostratori di teoremi standardizzati e risolutori di SMT.)
EDIT: ho appena trovato il seguente articolo di Matt Parkinson e Alex Summers, The Relationship Between Separation Logic e Implicit Dynamic Frames , in cui affermano di fornire una logica che unifica i due metodi.