A análise de fluxo de dados funciona sobre um gráfico de fluxo de controle. Quando um idioma em consideração suporta exceções, o gráfico de fluxo de controle pode explodir.
Quais são as técnicas padrão para lidar com essa explosão? Podemos ignorar profundamente as arestas induzidas pela exceção? As análises de fluxo de dados, de qualquer forma, calculam super aproximações, para que acabemos com uma solução menos precisa, mas sólida. Isso é verdade?
Atualização : Aqui estão alguns links úteis que consegui desenterrar no final:
Respostas:
Ignorar exceções não é válido. Exemplo:
Ao analisar
f
, é necessário levar em consideração o fato queg
gera uma exceção; caso contrário, você concluiria incorretamente quex
sempre é 0 no retorno def
.Não sei se existe uma técnica "padrão" para lidar com exceções. Há alguma literatura sobre o assunto, não tenho mais idéia de quais artigos são relevantes do que posso encontrar em uma pesquisa no Google.
Formalmente, as exceções podem ser transformadas em instruções condicionais que propagam a cadeia de chamadas, o que naturalmente explode o gráfico de fluxo de controle. Em muitos casos concretos, o caso de exceção é o menos interessante, onde muitos dados são mortos, portanto, devem ser tratados preguiçosamente em uma abordagem avançada (não é necessário analisar a animação no caminho da exceção, se o manipulador matar os dados) .
fonte