Tipos de propriedade e lógica de separação

10

Os tipos de propriedade e a lógica de separação parecem ter objetivos semelhantes, controle sobre propriedade e alias. Talvez eu deva acrescentar: a capacidade de escrever especificações modulares.

O que se sabe sobre o relacionamento entre os tipos de propriedade e a lógica de separação?

Uday Reddy
fonte
Parece vagamente familiar.
31512 Dave
@DaveClarke: Minha resposta faz sentido para você? Você trabalhou muito na propriedade e eu só fiz um pouco antes de começar a trabalhar na lógica da separação.
Neel Krishnaswami
@NeelKrishnaswami: Sua resposta faz muito sentido. Pretendo preencher algumas lacunas quando encontrar tempo. De qualquer forma, não conheço nenhum artigo que faça uma comparação significativa.
30812 Dave Clarke

Respostas:

7

Recentemente, terminei de escrever uma pesquisa sobre os tipos de propriedade e descobri muito pouco que discute a relação entre os dois tópicos. Os três documentos mais próximos que encontrei são os seguintes, que curiosamente vêm da mesma conferência:

  • Yang Zhao e John Boyland. Uma interpretação de permissão fundamental para tipos de propriedade. No Segundo Simpósio Internacional IEEE / IFIP sobre Aspectos Teóricos da Engenharia de Software, TASE 2008, de 17 a 19 de junho de 2008, Nanjing, China. IEEE Computer Society, 2008., páginas 65–72.

  • Wang Shuling, Luís Soares Barbosa e José Nuno Oliveira. Um modelo relacional para lógica de separação confinada. No Segundo Simpósio Internacional IEEE / IFIP sobre Aspectos Teóricos da Engenharia de Software, TASE 2008, 17 a 19 de junho de 2008, Nanjing, China. IEEE Computer Society, 2008., páginas 263-270.

  • Shuling Wang e Zongyan Qiu. Um modelo genérico para confinamento e sua aplicação. No Segundo Simpósio Internacional IEEE / IFIP sobre Aspectos Teóricos da Engenharia de Software, TASE 2008, 17 a 19 de junho de 2008, Nanjing, China. IEEE Computer Society, 2008., páginas 57–64.

O primeiro artigo codifica dois estilos de propriedade, como proprietários como dominadores e proprietários como fechaduras, em termos das permissões fracionárias de Boyland, que são um sistema de capacidade desenvolvido para raciocinar sobre programas.

O segundo artigo pega idéias de confinamento semelhantes às usadas nos tipos de propriedade e as adiciona à lógica de separação.

O terceiro artigo desenvolveu uma abordagem semântica que é usada para codificar várias disciplinas de confinamento, como tipos de propriedade. Não tenho certeza se o sistema deles também abrange a lógica da separação e não posso acessá-la no momento. A abordagem deles é bastante ad hoc; pode ser visto como um documento mais formal e sistemático que escrevi há algum tempo com James Noble e outros:

  • Para um modelo de encapsulamento James Noble, Robert Biddle, Ewan Tempero, Alex Potanin, Dave Clarke O Primeiro Workshop Internacional sobre Alias, Confinamento e Propriedade em Programação Orientada a Objetos (IWACO), 2003.
Dave Clarke
fonte
9

A maneira como entendo a diferença é que os tipos de propriedade restringem a forma do gráfico do objeto e os sistemas subestruturais (como a lógica de separação) gerenciam permissões para acessar o heap .

No trabalho original sobre tipos de propriedade, a idéia é manter a invariância dos proprietários como dominadores . Um objeto é dominado por um objeto , se todos os caminhos da raiz configurada para contiver . Portanto, é acessível apenas a partir de . Portanto, o sistema é projetado para que as declarações de classe sejam parametrizadas por seus proprietários, e esse fato fornece uma condição de quadro derivada para : seu estado não pode mudar, a menos que um método em seu proprietário seja chamado.odododod

Por outro lado, sistemas subestruturais como tipos lineares e lógica de separação dependem da idéia de recursos . Cada região da pilha é um recurso e, se você não possui o recurso, não pode tocá-lo. Isso facilita muito as condições de quadro: elas sempre se mantêm.

Uma diferença superficial (que, no entanto, me confundiu por um longo tempo) foi que os tipos de propriedade eram tipos e a lógica de separação era uma lógica de programa. Felizmente, enquanto os tipos de propriedade nasceram em um cenário teórico, as pessoas também aplicaram essas idéias para programar lógicas.

As duas partes principais do trabalho teórico que conheço são o trabalho de Kassios sobre estruturas dinâmicas , que Bannerjee e Naumann (e seus alunos) exploraram sistematicamente em seu trabalho sobre lógica regional .

Pelo que entendi, a abordagem básica deles é usar a lógica Hoare e, em seguida:

  1. Adicione um novo tipo de variáveis ​​de região, que você usa para associar objetos e regiões.
  2. Adicione um sistema de efeitos à lógica Hoare para rastrear as regiões que leem e escrevem o toque.
  3. Use os efeitos para determinar se uma asserção respeita ou não o quadro. Se for, você pode enquadrar e, se não, não pode.

Cada abordagem tem benefícios e fraquezas.

  • A propriedade torna as propriedades do quadro significativamente menos convenientes de usar do que nas abordagens subestruturais, pois é necessário calcular as condições do quadro.

  • Por outro lado, os algoritmos nos DAGs suportam provas indutivas mais bonitas em um estilo de propriedade, pois é possível dissociar a pegada da estrutura do ponteiro. Em uma especificação de estilo de separação, o natural é fornecer um invariante indutivo em uma árvore de abrangência. Mas se a árvore de abrangência que o algoritmo calcula for sempre diferente daquela que o seu invariante possui, você terá um mundo de mágoa.

Meu senso geral é que a separação é mais fácil de usar do que a propriedade, pois precisamos de propriedades de quadro para quase todos os comandos em um programa imperativo. (Dave Naumann argumenta que a lógica da região é mais passível de automação, uma vez que a lógica de asserção permanece simples e antiga FOL e, portanto, você pode usar provadores de teoremas prontos para uso e solucionadores de SMT).

Edição: Acabei de encontrar o seguinte artigo de Matt Parkinson e Alex Summers, A relação entre lógica de separação e quadros dinâmicos implícitos , onde eles alegam fornecer uma lógica que unifica os dois métodos.

Neel Krishnaswami
fonte
Muito obrigado por suas idéias, Neel. No entanto, estive pensando sobre a relação entre os dois paradigmas, e não sobre as diferenças . Então, eu vou manter a questão em aberto por enquanto.
Uday Reddy