Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porHilario Correira Modificado hace 9 años
1
Alexandre D. Salcianu and Martin C. Rinard
2
Definiciones Un método es puro si no “muta” ninguna locación existente en el estado correcto anterior a la invocación del método.
3
Para qué? Cómo input para algunos análisis de programas Para entender y documentar el programa Para reducir el trabajo de los model checkers
4
Idea Método para analizar la pureza de programas Java (no anotados). Construido sobre una mejora de “combined pointer and escape analysis method” (Rinard- Whaley) Chequea si un método es puro, en el sentido de que no cambia ningún objeto existente en el pre-estado.
5
Mejoras Se distingue entre objetos existentes en el pre-estado y objetos nuevos (creado por el método) La información adicional generada por el método sirve para obtener información útil sobre efectos colaterales. El método fue probado (correctitud), implementado y utilizado en variedad de tareas.
6
Generalizaciones de Pureza Parámetros Read-Only : el método no cambia ningún objeto alcanzable desde el parámetro. Parámetros Seguros (safe): parámetros read-only el método no crea ningún camino externo visible en el heap hacia objetos alcanzables desde el parámetro.
7
Resumen hasta acá Análisis para detectar métodos puros en programas Java no anotados Presenta mejoras con respecto a análisis anteriores Permite la alocación de objetos nuevos en el heap Detecta read-only and safe parameters.
8
Revisión del análisis Para cada método m y cada punto del programa dentro de m el análisis computa un points-to graph que modela la parte del heap que el método m accede antes de ese punto.
9
Revisión del Análisis Un objeto “escapa” si es alcanzable desde afuera del método analizable (ej: desde uno de los parámetros) En otro caso, el objeto está “capturado” Un eje externo siempre termina en un load node
10
Revisión del Análisis Para cada método m el análisis computa un conjunto W m que contiene los campos abstractos modificados que son visibles externamente. Un campo abstracto es un campo para un nodo específico.
11
Revisión del Análisis El análisis examina métodos empezando desde las hojas. Se realiza sin conocer el contexto en que se llamó el método (análisis composicional) Obtiene un único resultado parametrizable El resultado es luego instanciado en cada lugar que se invoque el método m. Normalmente, el análisis procesa cada método una única vez. Métodos recursivos requieren varias pasadas hasta llegar a un punto fijo.
12
Ejemplo: Cell Constructor
13
Ejemplo: List.add
14
Descanso??????
15
Continuando el Análisis Cada points-to graph registra los nodos que “escapan globalmente”, es decir, aquellos nodos que son potencialmente accesibles por código que desconocemos. Cualquier nodo alcanzable desde estos nodos también escapa globalmente El análisis debe ser muy conservativo con respecto a estos nodos, en particular, porque pueden ser mutados por código no conocido. Se utiliza un nodo especial para otros nodos desconocidos que escapan globalmente
16
Análisis Intraprocedural
17
Análisis Interprocedural Por cada llamada (call) del tipo v R = v 0.s(v 1, …, v j ) el análisis usa el points-to graph G anterior a la llamada y el points-to graph G calle (gráfico final del método invocado) para computar un points-to graph posterior a la invocación del método. Si hay múltiples posibles invocaciones, el análisis las considera a todas y mergea el conjunto de resultados de los points to graph
18
Paso 1 El análisis computa un mapeo, que relaciona los parámetros y los nodos cargados del método invocado, con los nodos que representan Incluir gráfico
19
Paso 2
20
Análisis de Efectos Este análisis se realiza sobre el análisis descripto anteriormente. El análisis propaga efectos interprocedurales de las siguiente forma: cuando el análisis del método m encuentra una invocación, se utiliza el mapeo de nodos intraprocedural para proyectar los efectos del método invocado e incluir esos efectos en el conjunto W m.
21
Pureza del Método Se computa el conjunto A de nodos que son alcanzables en G, desde nodos parámetros, utilizando ejes externos. El método m es puro si y sólo si para todo n perteneciente a A: 1. n no escapa globalmente 2. Ningún campo de n es alterado
22
Parámetros read-Only Para chequear si el parámetro p es read-only: Considerar el nodo correspondiente n p Determinar el conjunto S 1 que contiene a n p y todos los load nodes alcanzables desde n p utilizando ejes externos El parámetro p es read-only si y solo si: 1. No hay ningún campo abstracto perteneciente a W m tal que n pertenece a S 1 2. Ningún nodo de S 1 escapa globalmente
23
Parámetros Safe Para chequear si un p parámetro es safe: Se computa el conjunto S 1 Se computa el conjunto S 2 de nodos alcanzables desde nodos parámetros y/o desde nodos retornados, utilizando ejes externos o internos. Para chequear la ausencia de un nuevo camino hacia un objeto alcanzable desde p, basta con chequear que ningún eje interno vaya desde un nodo en S 2 a un nodo en S 1
24
Write effects
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.