El análisis de flujo de datos funciona sobre un gráfico de flujo de control. Cuando un idioma considerado admite excepciones, el gráfico de flujo de control puede explotar.
¿Cuáles son las técnicas estándar para lidiar con esta explosión? ¿Podemos ignorar los bordes inducidos por la excepción? Los análisis de flujo de datos de todos modos calculan sobre-aproximaciones, por lo que terminaríamos con una solución menos precisa pero sólida. ¿Es esto cierto?
Actualización : Aquí hay algunos enlaces útiles que pude desenterrar al final:
Respuestas:
Ignorar las excepciones es poco sólido. Ejemplo:
Al analizar
f
, debe tener en cuenta el hecho de queg
genera una excepción, de lo contrario, concluiría incorrectamente quex
siempre es 0 al regresar def
.No sé si existe una técnica "estándar" para hacer frente a las excepciones. Hay algo de literatura sobre el tema, no tengo más idea de qué documentos son relevantes de lo que puedo encontrar en una búsqueda en Google.
Formalmente, las excepciones pueden convertirse en declaraciones condicionales que se propagan por la cadena de llamadas, lo que, por supuesto, explota el gráfico de flujo de control. En muchos casos concretos, el caso de excepción es el caso menos interesante, donde se matan muchos datos, por lo que debe manejarse perezosamente en un enfoque directo (no es necesario analizar la vida en la ruta de excepción si el controlador mata los datos) .
fuente