1 / 31

Purity and Side Effect Analysis for Java Programs

Alexandre D. Salcianu and Martin C. Rinard. Purity and Side Effect Analysis for Java Programs. 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 )

Télécharger la présentation

Purity and Side Effect Analysis for Java Programs

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Alexandre D. Salcianu and Martin C. Rinard Purity and SideEffectAnalysisfor Java Programs

  2. Idea • Método para analizar la pureza de programas Java (no anotados). • Construido sobre una mejora de “combined pointer and escape analysismethod” (Rinard-Whaley) • Chequea si un método es puro, en el sentido de que no cambia ningún objeto existente en el pre-estado.

  3. Para qué? • Cómo input para algunos análisis de programas • Para entender y documentar el programa • Para reducir el trabajo de los modelcheckers • Los métodos puros se pueden utilizar en especificaciones y aserciones dentro del código.

  4. Mejoras • Se distingue entre objetos existentes en el pre-estado y objetos nuevos (creado por el método) • Además de determinar si un método es puro o no , el análisis obtiene otro tipo de información relacionado con los efectos que produce el método : • Parámetros read-only • Parámetros Safe • WriteEffects

  5. Análisis Intraprocedural • Para cada método m y cada punto del programa dentro de m el análisis computa un points-tograph que modela la parte del heap que el método m accede antes de ese punto. • Un points-tograph G es un tupla G = < I,O,L,E > • I = conjunto de ejes internos • O = conjunto de ejes externos • L = estado abstracto de las variables locales (i.e L(v) es el conjunto de nodos que la variable local v puede apuntar) • E = conjunto de nodos que escapan “globalmente”

  6. Definición de escape • Un objeto “escapa” si es alcanzable desde afuera del método analizado (ej: desde uno de los parámetros) • En otro caso, el objeto está “capturado”.

  7. Ejemplo: Main.sumX p head L6 data list P12 L4 L5 next cell data cell it I2 next Círculos sólidos: nodos internos Círculos punteados: nodos externos Flechas sólidas: ejes internos Flechas punteadas: ejes externos

  8. Análisis Intraprocedural • Además del points-tograph, para cada método m el análisis computa un conjunto Wmque contiene los campos abstractos modificados que son visibles externamente. • Un campo abstracto es un campo para un nodo específico, se lo denota como <n,f> donde n es el nodo y f es el campo.

  9. Análisis Intraprocedural • El cálculo del PTG y el Wm se define a partir de una función de transferencia, aplicada a un conjunto reducido de sentencias. • El grafo inicial se compone solo de los parámetros que toma el método, más el parámetro implícito this. • if S goto a : se asume que la condición S no produce efectos colaterales => no cambio nada.

  10. Análisis Intraprocedural • v1 = v2 : se agrega un eje desde v1 a todos los nodos apuntados por v2 • v = new C : se agrega un nuevo nodo interno y se lo apunta desde v. En las variables se realizan strongupdates

  11. Análisis Intraprocedural • v1 = v2.f: • Caso 1: si ningún nodo apuntado por v2 escapa • Caso 2: si algún nodo apuntado por v2 escapa

  12. Análisis Intraprocedural • v1.f = v2: se agrega un eje desde cada nodo apuntado por v1 hacia todos los nodos apuntados por v2.Se agregan a Wmlos campos de la forma : <L(v1) externos , f > En los campos de variables se realizan weakupdates

  13. Ejemplo: Cell Constructor d P4 data this P2 next Cell (Object d, Cell n) { this.data = d; this.next = n; } P3 n W = {<P2, data>, <P2,next>}

  14. Ejemplo: List.add head this P5 L1 head next I1 data voidadd(Object e){ this.head = new Cell(e,this.head); } P6 e W {<P5, head>}

  15. Ejemplo: ListItr.next cell data this P10 L4 L3 L5 next cell result Objectnext(){ Objectresult = this.cell.data; this.cell = this.cell.next; returnresult; } W {<P10, cell>}

  16. Análisis InterproceduralCaso Fácil • Por cada llamada (call) del tipo vR = v0.s(v1, … , vj) Si s es un método no analizable entonces todos los argumentos (v0,v1, … , vj) pueden ser alcanzados por código desconocido. Luego el análisis agrega todos los nodos apuntados por v0,v1, … , vjal conjunto E de nodos que escapan globalmente Además se agrega un eje entre vr y el nodo nglb

  17. Análisis Interprocedural • Por cada llamada (call) del tipo vR = v0.s(v1, … , vj) el análisis usa el points-tographG anterior a la llamada y el points-tographGcalle(gráfico final del método invocado) para computar un points-tograph 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 pointstograph

  18. Análisis Interprocedural El análisis opera en dos pasos: • Se computa un mapeo entre los parameternodes y los load nodes del método invocado, hacia los nodos que representan en el método llamador. • Se usa el mapeo para “proyectar” el PTG del método llamado sobre el PTG anterior a la invocación

  19. Paso 1: Mapping • El análisis computa un mapeo, que relaciona los parámetros y los load nodes del método invocado, con los nodos del método llamador que representan

  20. Paso 2: Merge • Se utiliza el mapeo para combinar el grafo anterior a la llamada (G) y el grafo de la llamada (Gcalle), para obtener el grafo posterior a la llamada • Se remueven load nodes capturados. • Se utiliza la información de los campos modificados del método invocado (Wcalle) para actualizar los campos modificados del método m(Wm) (utilizando el mapeo)

  21. Ejemplo: sumX head L6 list P12 cell it I2 StaticfloatsumX(Listlist){ float s = 0; Iteratorit = list.iterator(); while (it.hasNext()) { Point p = (Point) it.next(); s += p.x } return s; }

  22. Ejemplo: sumX head L6 data L4 list P12 next cell cell it I2 L5 cell data this P10 L3 L4 • P10  I2 • L3  L6 next cell Gnext • L5  L5 • L4  L4 L5

  23. Ejemplo: sumX p head L6 data list P12 L4 L5 next cell cell it I2 StaticfloatsumX(Listlist){ float s = 0; Iteratorit = list.iterator(); while (it.hasNext()) { Point p = (Point) it.next(); s += p.x } return s; }

  24. Ejemplo: sumX p head L6 data list P12 L4 L5 next cell cell it I2 cell data • P10 I2 • L3  L5 • L3  L6 P10 L3 L4 next cell • L5  L5 • L4  L4 L5

  25. Ejemplo: sumX p head L6 data list P12 L4 L5 next cell data cell it I2 next cell data P10 L3 L4 • P10 I2 • L3  L5 • L3  L6 next cell • L5  L5 • L4  L4 L5

  26. Ejemplo: sumX p head L6 data list P12 L4 L5 next cell data cell it I2 next StaticfloatsumX(Listlist){ float s = 0; Iteratorit = list.iterator(); while (it.hasNext()) { Point p = (Point) it.next(); s += p.x } return s; }

  27. 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: • n no escapa globalmente y • Ningún campo de n es alterado

  28. Ejemplo: sumX p head L6 data list P12 L4 L5 next cell data cell it I2 next A = {P12, L6, L4, L5} Wm= {} E = {} }  sumX es puro

  29. Ejemplo: List.add head this P5 L1 head next I1 A = {P5, P6, L1} Wm= {<P5, head>} E = {} data P6 e

  30. Características del Análisis • 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.

  31. Descanso??????

More Related