La façon dont je comprends la différence est que les types de propriété contraignent la forme du graphique d'objet et que les systèmes sous-structurels (comme la logique de séparation) gèrent les autorisations d'accès au tas .
oréoréoréoré
En revanche, les systèmes sous-structurels comme les types linéaires et la logique de séparation reposent sur l'idée de ressources . Chaque région du tas est une ressource, et si vous ne possédez pas la ressource, vous ne pouvez pas la toucher. Cela rend les conditions de cadre très faciles: elles tiennent toujours.
Une différence superficielle (qui m'a néanmoins longtemps dérouté) était que les types de propriété étaient des types et que la logique de séparation était une logique de programme. Heureusement, alors que les types de propriété sont nés dans un cadre de théorie des types, les gens ont également appliqué ces idées aux logiques de programmation.
Les deux principaux travaux théoriques que je connais à ce sujet sont les travaux de Kassios sur les cadres dynamiques , que Bannerjee et Naumann (et leurs étudiants) ont systématiquement exploités dans leur travail sur la logique régionale .
Si je comprends bien, leur approche de base est de prendre la logique Hoare, puis:
- Ajoutez un nouveau type de variables de région, que vous utilisez pour associer des objets et des régions.
- Ajoutez un système d'effets à la logique Hoare pour suivre les régions en lecture et en écriture tactile.
- Utilisez les effets pour déterminer si une assertion respecte ou non le cadre. Si c'est le cas, vous pouvez l'encadrer, et si ce n'est pas le cas, vous ne pouvez pas.
Chaque approche présente des avantages et des inconvénients.
La propriété rend les propriétés du cadre beaucoup moins pratiques à utiliser que dans les approches sous-structurelles, car vous devez calculer les conditions du cadre.
D'un autre côté, les algorithmes des DAG prennent en charge de plus belles preuves inductives dans un style de propriété, car vous pouvez dissocier l'empreinte de la structure du pointeur. Dans une spécification de style séparation, la chose naturelle est de donner un invariant inductif sur un arbre couvrant. Mais si l'arbre couvrant que l'algorithme calcule est toujours différent de celui de votre invariant, vous êtes dans un monde de souffrance.
Mon sentiment général est que la séparation est plus facile à utiliser que la propriété, car nous avons besoin des propriétés de trame pour presque toutes les commandes d'un programme impératif. (Dave Naumann fait valoir que la logique de région est plus adaptée à l'automatisation, car la logique d'assertion reste un ancien FOL, et vous pouvez donc utiliser des prouveurs de théorèmes et des solveurs SMT standard.)
EDIT: Je viens de trouver l'article suivant de Matt Parkinson et Alex Summers, The Relationship between Separation Logic and Implicit Dynamic Frames , où ils prétendent donner une logique unifiant les deux méthodes.