Equivalência de análise de fluxo de dados, interpretação abstrata e inferência de tipos?


9

A resposta de @ Babou a uma pergunta recente me lembra que, uma vez, acho que li um artigo sobre a equivalência (em termos de fatos que podem ser inferidos ou provados e a complexidade do tempo de execução do algoritmo de inferência) da análise de fluxo de dados , interpretação abstrata e inferência de tipo .

Em alguns sub-casos (como entre análise de fluxo de dados interprocedural sensível ao contexto e interpretação abstrata), a equivalência é relativamente óbvia para mim, mas a questão parece mais sutil para outras comparações. Por exemplo, não consigo descobrir como a inferência do tipo Hindley-Milner poderia ser usada para provar algumas das propriedades que podem ser comprovadas com a análise de fluxo de dados sensível ao fluxo.

Quais são as referências seminais discutindo as equivalências (ou diferenças) entre análise de fluxo de dados, interpretação abstrata e inferência de tipos?

Respostas:


4

A análise do fluxo de dados e a inferência de tipos são instâncias específicas da interpretação abstrata.

A análise do fluxo de dados e a interpretação abstrata parecem semelhantes, pois ambas tratam da computação de um ponto fixo. As análises de fluxo de dados geralmente têm domínios abstratos de altura finita, o que garante a finalização. Em geral, a interpretação abstrata não assume tais domínios abstratos; para lidar com domínios de altura infinita, a interpretação abstrata utiliza técnicas de alargamento e estreitamento.

Acontece que a inferência de tipo também se refere à computação de pontos de correção, embora isso esteja longe de ser óbvio. Aqui está um artigo que mostra explicitamente que os tipos são interpretações abstratas: papel . Basicamente, os tipos são vistos como uma abstração da semântica concreta do programa. No sistema de tipos Hindley-Milner, por exemplo, o domínio abstrato dos tipos é de altura infinita e computar um tipo (mais geral) usando a unificação está executando essencialmente uma operação de ampliação (muito imprecisa).


4

Um bom lugar para aprender sobre essas três abordagens e como o relacionamento é o livro Principles of Program Analysis, de Nielson, Nielson e Hankin.

Não acho correto dizer que análise de fluxo de dados, interpretação abstrata e inferência de tipos são a mesma coisa. Embora existam muitas semelhanças, e talvez mais do que o esperado, dado que os três se originaram em comunidades diferentes, também existem muitas diferenças.


3

Eu os considero basicamente os mesmos. Eles tinham inicialmente objetivos diferentes e foram criados por diferentes facções da ciência da computação.

A análise de fluxo de dados vem da facção de engenharia do compilador, tentando falar sobre seus algoritmos de otimização e revisar os limites superiores de complexidade, etc.

A interpretação abstrata vem do campo formal e matemático da ciência da computação. Esta é uma versão ainda mais formal, com mais interesse na correção e menos na criação de compiladores reais.

A inferência de tipo vem do campo acadêmico da programação funcional, onde inicialmente era uma ferramenta para fazer coisas legais com os compiladores. Então surgiu a idéia de que um tipo pode ser muito mais do que apenas "int" ou "float", mas também outras coisas, como na análise clássica de fluxo de dados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.