[en] Dynamically typed languages are ubiquitous in today's applications. These languages ease the task of programmers but introduce significant runtime overheads since variables are neither declared nor bound to a particular type. For efficiency reasons, the code generated at runtime is specialized for certain data types, so the types of variables require to be constantly validated. However, these specialization techniques still carry important overheads, which can adopt different forms depending on the kind of applications. This thesis proposes three hybrid HW/SW mechanisms that reduce these different forms of overhead. The first two mechanisms target the overhead produced during the execution of the specialized code, which is characterized by the frequent execution of checking operations that are used to verify some assumptions about the object types. The first technique improves the performance by reducing the number of instructions used to perform these checks. The second technique is based on a novel dynamic type-profiling scheme that removes most of these checks. The third technique targets the overhead due to the execution of the non-optimized code, which performs an important amount of profiling for future optimizations. We present a hybrid HW/SW mechanism that reduces the cost of computing the addresses of object properties in a very efficient manner. This is an innovative approach that significantly improves the speculative strategy currently adopted by state-of-the-art dynamic compilers.

[es] Los lenguajes dinámicamente tipificados están muy presentes en las aplicaciones de hoy en día. Aunque estos lenguajes facilitan las tareas de programación, también sufren de importantes costes adicionales en la ejecución del programa. Esto es debido a que los tipos de las variables no son declarados en el programa y a que dichas variables pueden contener elementos de más de un tipo distinto durante la misma ejecución. Consecuentemente el tipo de las variables debe ser evaluado en tiempo de ejecución. Para intentar minimizar estos costes adicionales, se emplean técnicas de especialización de código a partir de información dinámica de tipos. Sin embargo este código especializado requiere validar estos tipos constantemente para cada vez que se produce un acceso a una variable. Aunque los costes adicionales de estos lenguajes son reducidos notablemente con estas técnicas de especialización de código, éstos siguen teniendo un factor importante en la ejecución, de modo que el rendimiento de estas aplicaciones sigue siendo considerablemente menor en comparación con los lenguajes estáticamente tipificados. Por otra parte, estos costes adicionales adoptan una forma distinta según el tipo de aplicación que se ejecute. Esta tesis propone tres mecanismos co-diseñados en SW y en HW que permiten reducir estos costes adicionales para los dos tipos de aplicaciones más comunes en los lenguajes dinámicamente tipificados. Dos de las técnicas propuestas reducen los costes adicionales para un tipo de aplicaciones regulares, de larga duración y con un alto reúso de código. Este tipo de aplicaciones ejecutan código especializado durante una parte muy importante del tiempo, lo que les permite alcanzar un rendimiento bastante más próximo al alcanzado por las aplicaciones escritas en lenguajes estáticamente tipificados. Los costes adicionales de este código especializado consisten básicamente en las verificaciones en tiempo de ejecución de los tipos de las variables cuando éstas son accedidas. Teniendo en cuenta estos costes, la primera técnica propuesta reduce el número de instrucciones y latencias ejecutadas para realizar estas operaciones de verificación de tipo de las variables. Por otro lado, la segunda técnica está basado en un mecanismo dinámico que permite recolectar información de tipos de forma eficiente, con el fin de eliminar de la ejecución un subconjunto de estas operaciones de verificación de tipo. La tercera técnica propuesta reduce los costes adicionales para aplicaciones de corta duración y con un bajo reúso de código, las cuales están más relacionadas con la gestión rápida de eventos en un entorno web. Este tipo de aplicaciones ejecutan un porcentaje menor de código especializado respeto a las primeras, de modo que el tipo de costes adicionales más predominante consiste en las tareas de desambiguación del tipo de las variables cuando éstas son accedidas. Teniendo en cuenta esto, nosotros hemos propuesta un mecanismo HW/SW híbrido que permite eliminar por completo la mayor parte de estas tareas para el caso de los accesos en modo lectura de los métodos o atributos de un objeto. Este es un esquema novedoso que mejora significativamente la técnica del estado del arte de los lenguajes dinámicamente tipificados.