Implementación de un Entorno de Ejecución Reflexivo mediante compiladores de Meta-Trazas - Marasca, Dardo Gustavo (2020)
Los lenguajes dinámicos permiten al programador construir sistemas de software de forma ágil debido a que eliminan la necesidad de indicar tipos estrictos a todas las variables o entidades que forman parte del programa. Usualmente estos lenguajes son ejecutados sobre una máquina virtual que abstrae el hardware o sistema subyacente. Gracias a esto, un mismo producto de software puede ser ejecutado en diferentes entornos sin grandes modificaciones. Si bien esto último permite gran flexibilidad, la indirección adicional provoca que en términos generales los lenguajes de tipado dinámico sean significativamente más lentos que aquellos lenguajes que tienen la capacidad de generar ejecutables en código nativo. Para mejorar las capacidades evolutivas de las aplicaciones en tiempo de ejecución, recientemente se introdujo a los entornos de ejecución reflexivos, máquinas virtuales que permiten, a los programas que ejecutan soportados por ella, inspeccionarla y modificarla según sean sus necesidades. Debido a la flexibilidad que poseen los lenguajes dinámicos y la gran cantidad de estudios relacionados a la construcción de máquinas virtuales para ellos, las primeras implementaciones de entornos de ejecución reflexivos están siendo construidos para esta familia de lenguajes. En recientes estudios fue desarrollado MATE, un modelo para la construcci´on de m´aquinas virtuales reflexivas que, mediante un protocolo basado en meta-objetos, permite al usuario modificar el comportamiento de diferentes componentes de la m´aquina virtual subyacente, como por ejemplo, la organización de la memoria o el proceso ejecución de métodos. Gracias a una implementación basada en meta-compiladores con evaluación parcial, se demostró que los costos adicionales en términos de rendimiento introducidos por las funcionalidades reflexivas, pueden ser mitigados considerablemente. En este trabajo se explora una implementación alternativa de MATE, basada en compiladores por metra-trazas, con el fin de verificar si los resultados previos son generalizables a esta familia de compiladores. Para ello, implementamos una máquina virtual, mediante el framework Pypy, comparable en funcionalidades a las implementaciones previas de MATE. Esta tecnología, diseñada para la construcción de máquinas virtuales, nos permitió adicionalmente, y de forma muy sencilla, dotar a nuestra máquina virtual de un compilador JIT para mejorar su rendimiento. Para comprobar nuestra hipótesis, comparamos el rendimiento de ambas soluciones ante un conjunto de pruebas diseñadas para evaluar el impacto inherente del soporte a MATE y su desempeño en casos de uso posibles de las capacidades reflexivas. En nuestro análisis logramos comprobar que ambas soluciones presentan un rendimiento asintóticamente similar, siguiendo la misma línea que los resultados de estudios previos que comparan compiladores JIT basados en evaluación-parcial y meta-trazas.