
Defensa Tesis Licenciatura Adrian Castiglione
14 septiembre, 2023 @ 3:30 pm - 4:30 pm
Título: Inferencia de tipos genéricos para colecciones en ambientes con LiveTyping
Director: Hernán Wilkinson
Jurados: Agustín Martinez, Maximiliano Contieri
Resumen:
LiveTyping es una técnica de anotación automática de tipos cuyo objetivo es mejorar la experiencia de desarrollo en ambientes dinámicamente tipados, en los que la ausencia de tipado estático limita seriamente la capacidad de las herramientas de desarrollo. Su implementación en Smalltalk consiste en extender la VM para recolectar información durante la ejecución de código, aprovechando que se trata de un ambiente vivo, donde el IDE y el programa son ejecutados por la misma VM. Esto permite anotar cada expresión en base a las clases de los valores que haya tomado durante la ejecución y utilizar estas anotaciones para mejorar las herramientas de desarrollo disponibles. Este enfoque sin embargo no es suficiente para anotar tipos genéricos, que están definidos a partir de su clase base y del uso que se les dé durante la ejecución del programa; un ejemplo típico de estos tipos son las colecciones.
La inferencia de tipos, por otra parte, consiste en realizar un análisis estático del código fuente del programa con el objetivo de anotar con tipos cada expresión encontrada. Los trabajos previos en este área marcan que para el caso general en lenguajes dinámicos no es posible tipar cada expresión de forma precisa y con suficiente velocidad como para que tenga utilidad práctica, sin embargo, cuando se buscan objetivos más acotados es posible reducir la cantidad de esfuerzo que debe realizarse y alcanzar resultados útiles. En ese sentido, existe un balance entre precisión y velocidad: se puede obtener mayor velocidad reduciendo el alcance del análisis, pero esto a su vez disminuye la precisión de la solución obtenida.
En este trabajo se estudia la extensión de LiveTyping con un algoritmo de inferencia de tipos que aprovecha la información recolectada durante la ejecución del programa y cuyo objetivo es completar los parámetros de las diferentes colecciones del sistema. Se explorará el funcionamiento del algoritmo, cómo utiliza la información recolectada por LiveTyping y las limitaciones que presenta.
Por último se presentarán extensiones sobre cómo puede utilizarse o modificarse para tipos genéricos que no son colecciones y se darán algunos ejemplos de cómo las herramientas de desarrollo pueden aprovechar la nueva información disponible.