La forma en que entiendo la diferencia es que los tipos de propiedad restringen la forma del gráfico de objetos , y los sistemas subestructurales (como la lógica de separación) administran los permisos para acceder al montón .
oreoreoreore
En contraste, los sistemas subestructurales como los tipos lineales y la lógica de separación dependen de la idea de los recursos . Cada región del montón es un recurso, y si no posee el recurso no puede tocarlo. Esto hace que las condiciones del cuadro sean muy fáciles: siempre se mantienen.
Una diferencia superficial (que sin embargo me confundió durante mucho tiempo) fue que los tipos de propiedad eran tipos, y la lógica de separación era una lógica de programa. Afortunadamente, si bien los tipos de propiedad nacieron en un entorno de teoría de tipos, las personas también han aplicado estas ideas a la lógica del programa.
Las dos piezas principales de trabajo teórico que conozco sobre esto son el trabajo de Kassios sobre marcos dinámicos , que Bannerjee y Naumann (y sus estudiantes) explotaron sistemáticamente en su trabajo sobre lógica regional .
Según tengo entendido, su enfoque básico es tomar la lógica de Hoare y luego:
- Agregue un nuevo tipo de variables de región, que utiliza para asociar objetos y regiones.
- Agregue un sistema de efectos a la lógica de Hoare para rastrear las lecturas y escrituras de regiones.
- Use los efectos para determinar si una aserción respeta el marco o no. Si es así, puedes enmarcarlo, y si no lo es, no puedes.
Cada enfoque tiene beneficios y debilidades.
La propiedad hace que las propiedades del marco sean significativamente menos convenientes de usar que en los enfoques subestructurales, ya que debe calcular las condiciones del marco.
Por otro lado, los algoritmos en los DAG admiten pruebas inductivas más bonitas en un estilo de propiedad, ya que puede desacoplar la huella de la estructura del puntero. En una especificación de estilo de separación, lo natural es dar una invariante inductiva en un árbol de expansión. Pero si el árbol de expansión que calcula el algoritmo es siempre diferente al que tiene su invariante, se encontrará con un mundo de dolor.
Mi sentido general es que la separación es más fácil de usar que la propiedad, ya que necesitamos propiedades de marco para casi cada comando en un programa imperativo. (Dave Naumann argumenta que la lógica de la región es más adecuada para la automatización, ya que la lógica de afirmación sigue siendo un viejo FOL simple, por lo que puede usar probadores de teoremas y solucionadores SMT).
EDITAR: Acabo de encontrar el siguiente artículo de Matt Parkinson y Alex Summers, La relación entre la lógica de separación y los marcos dinámicos implícitos , donde afirman dar una lógica que unifica los dos métodos.