Control de Reentrancia de Aspectos en AspectJ
Professor Advisor
Abstract
La programación orientada a aspectos (POA) es un paradigma de programación. Permite encapsular funcionalidad que se encuentra dispersa en un sistema. Para ello utiliza pointcuts, predicados que definen eventos del programa, y advices, el código que es ejecutado en los eventos definidos por un pointcut. Un aspecto es una entidad que agrupa pointcuts y advices.
AspectJ es un lenguaje de programación para POA. Está diseñado como una extensión de Java, de forma que cualquier programa Java es también un programa AspectJ válido. Además del compilador oficial del proyecto AspectJ existen otros, de los cuales AspectBench Compiler (abc) es el más avanzado.
La reentrancia de aspectos ocurre cuando la ejecución de un aspecto desencadena nuevamente su propia ejecución; produciéndose bucles infinitos. Actualmente la reentrancia se soluciona utilizando chequeos y patrones adhoc.
La introducción de niveles de ejecución evita la reentrancia de aspectos. La ejecución del programa se separa en distintos niveles. Por defecto, la computación base ocurre en el nivel 0, mientras que los aspectos que observan esta ejecución se ubican en el nivel 1. La ejecución en el nivel 1 sólo puede ser observada desde el nivel 2, y así sucesivamente. Esta estructura para la ejecución de los programas soluciona casi todos los casos de reentrancia. Para el caso faltante, se utiliza un mecanismo adicional de control de reentrancia.
Para esta memoria se extendió el compilador abc para incorporar una adaptación de niveles de ejecución. El lenguaje soportado por el compilador extendido incorpora nueva sintaxis para ello. Y los programas compilados contienen rutinas adicionales que agregan la estructura de niveles de ejecución y el control de reentrancia. Además, es posible controlar el nivel de ejecución en que se ejecutará una expresión, si fuese necesario.
Se hicieron distintas pruebas para validar el trabajo realizado. Se confeccionaron tests para las distintas funcionalidades que, en conjunto, implementan niveles de ejecución. También se verificó la correcta compilación y ejecución de AJHotDraw, un framework para interfaces gráficas de programas de dibujo. Adicionalmente se probó el compilador con RacerAJ, una herramienta para la detección de data races implementada en AspectJ. RacerAJ es de interés porque incorpora pointcuts para evitar la ocurrencia de reentrancia de aspectos; removidos estos pointcuts, el programa funciona correctamente al ser compilado con esta versión extendida de abc.
Además se realizó un ligero análisis de performance para medir el impacto en los programas compilados. Para ello se utilizó una suite de benchmarks para AspectJ. Se compararon los tiempos de ejecución logrados al utilizar el compilador desarrollado y la versión original.
Identifier
URI: https://repositorio.uchile.cl/handle/2250/103835
Collections