image/svg+xml inr_logo_rouge logo.svg

Cold

2024-2026

.keep

Cold: Compilation and Optimization of Dynamic Languages

Cold is an Inria/University of Montreal associated team studying compilation techniques for dynamic languages.

Cold is co-funded by Inria and the University of Montreal.

Dynamic programming languages offer flexibility and generally facilitate rapid software development. Programs written using dynamic languages are typically slower, consume more memory, and are less energy efficient. This is especially concerning, considering that dynamic languages such as Python and JavaScript are extensively used. JavaScript is the main language for implementing web applications, while Python is the most used language for software development today and in particular in the very active field of Machine Learning and Artificial Intelligence.

To solve this issue, our team researches optimizing compilation techniques for dynamic languages. Such techniques generate optimized code when translating a program from its source code to machine code. This provides better performance without having to sacrifice the flexibility of dynamic languages. Furthermore, since novel optimizing techniques can be integrated into existing compilers, they can improve current programs with no additional effort by the application programmers.

In the last decades, the discovery of tracing just-in-time compilation and advances in partial evaluation have significantly improved the performance of dynamic languages. However, work remains to be done to bridge the gap between dynamic and static languages, a performant yet less flexible family of languages. Bridging this gap will enable significant savings in execution time and energy efficiency globally.

Cold: Compilation et Optimization des Langages Dynamiques

Le projet Cold est financé conjointement par l'Inria et par l'Université de Montréal.

Les langages de programmation dynamiques permettent des développements logiciel rapides grâce à leur flexibilité, malheureusement, souvent au prix d'exécutions plus lentes et plus gourmandes en mémoire. Souvent les programmes écrits avec des langages dynamiques sont aussi moins efficaces sur le plan énergétique. Cela est particulièrement préoccupant, étant donné que des langages dynamiques tels que Python et JavaScript sont parmi les plus utilisés. JavaScript est le langage principal pour la mise en oeuvre des applications web, tandis que Python est aujourd'hui le langage le plus employé pour le développement logiciel, en particulier dans le domaine très actif de l'apprentissage automatique et de l'intelligence artificielle.

Pour résoudre ce problème, notre équipe mène des recherches sur les techniques de compilation optimisée pour les langages dynamiques. Nous développons ces techniques dans le cadre de deux compilateurs portés par l'équipe : Bigloo et Gambit mais les optimisations que nous développons peuvent également être intégrées dans les compilateurs existants. De la sorte, elles améliorent les programmes actuels sans effort supplémentaire de la part des développeurs d'applications.

Au cours des dernières décennies, la découverte de la compilation à la volée basée sur la traçabilité (tracing just-in-time) et les avancées dans l'évaluation partielle ont considérablement amélioré les performances des langages dynamiques. Cependant, il reste du travail à accomplir pour combler l'écart entre les langages dynamiques et les langages statiques, une famille performante mais moins flexible. Réduire cet écart permettra de réaliser des économies significatives en temps d'exécution et en efficacité énergétique à l'échelle mondiale.