De dynamique à statique, le langage Elixir entame sa transformation
Le langage de programmation open-source Elixir a connu un grand succès pour les applications web et les systèmes distribués, mais le manque d'un système de typage statique était un obstacle pour trouver certains bogues au moment de la compilation. La dernière version d'Elixir marque sa transition vers une approche plus sûre et plus ergonomique grâce aux travaux théoriques de Giuseppe Castagna et de son doctorant Guillaume Duboc, tous deux travaillant à l'Institut de Recherche en Informatique Fondamentale (IRIF - CNRS/Université Paris Cité).
Créé en 2012 par José Valim, actuellement chief adoption officer chez Dashbit, Elixir est un langage de programmation open-source taillé sur mesure pour la machine virtuelle Erlang. Cette machine virtuelle a été développée avec le langage de programmation éponyme Erlang à la fin des années 80 par la société suédoise Ericsson avec la capacité de gérer un nombre énorme d'utilisateurs simultanés, d'échanger avec divers autres logiciels, mais aussi de fonctionner 24 heures sur 24 et 7 jours sur 7 pendant des années sans avoir besoin d'être arrêtée ou risquer une panne. D'abord utilisée pour gérer les réseaux de lignes téléphoniques, Erlang est aujourd'hui utilisée pour de nombreuses applications en ligne. Par exemple, WhatsApp est construit sur Erlang.
Elixir s'appuie sur Erlang avec de nouvelles abstractions et un écosystème riche, alimenté par de nombreuses bibliothèques qui sont à la fois faciles à utiliser et très stables. Il permet également de développer entièrement une application sans avoir besoin d'autres langages de programmation. « Les développeurs font souvent l'éloge d'Elixir parce qu'il permet à une petite équipe de créer un prototype à partir de zéro, puis de l'adapter à des millions d'utilisateurs avec les mêmes personnes, explique Guillaume Duboc, doctorant à l'IRIF. Sans Elixir, il faudrait embaucher des dizaines d'ingénieurs pour parvenir au même résultat. »
Avec son directeur de thèse Giuseppe Castagna, directeur de recherche CNRS à l'IRIF, Guillaume Duboc contribue depuis 2021 au développement d'Elixir. Leur travail est au cœur de la prochaine version. « L'une des principales caractéristiques de la nouvelle version d'Elixir est l'introduction d'un système de types graduels ensemblistes, explique José Valim. Cela nous permettra de passer d'un langage dynamique à un langage statique ».
La programmation implique l'utilisation d'un grand nombre de types de données différents, comme des nombres, des mots, des chaînes de caractères ou des listes, qui ont des propriétés différentes. Par exemple, on peut demander à un programme d'additionner des nombres, mais cette opération n'est pas possible avec des mots. Lorsque le code est compilé, c'est-à-dire traduit d’une forme que les humains peuvent lire et écrire en instructions que les machines peuvent exécuter, un langage statique vérifie si chaque commande est compatible avec le type de données qu'elle cible. Un langage dynamique, quant à lui, effectue ces vérifications pendant que le programme s'exécute, ce qui peut entraîner des bogues et des pannes. Cela implique que le développeur doit procéder à une double vérification préalable et vérifier manuellement les types de données. Un système de types graduels ensemblistes traite les différents types de données à l'aide d'opérations issues de la théorie des ensembles et vérifie le typage lors de la compilation.
Le système de types graduels ensemblistes utilisé dans Elixir est issu des recherches de Giuseppe Castagna et Guillaume Duboc. « Notre travail était très théorique, mais José Valim a lu nos articles et a vu qu'ils pouvaient être appliqués à Elixir, se souvient le doctorant. Des personnes de WhatsApp et de Roblox ont également travaillé sur certaines de nos idées. » « Grâce à Giuseppe Castagna et à ses étudiants, nous n'avons pas besoin d'impliquer d'autres personnes dans nos recherches, nous avons déjà les meilleures », se réjouit José Valim.
Elixir étant un langage expressif et flexible, le système de types graduels ensemblistes doit évaluer toutes ses caractéristiques. Il remplit cette mission en utilisant des preuves et des concepts mathématiques. L'équipe de Giuseppe Castagna l'a fait fonctionner sur la base de plusieurs opérations ensemblistes simples, dont l'utilisation est plus intuitive pour les développeurs. Ceci permet un passage en douceur d’un langage dynamique à un langage statique, en tenant compte des bases de code existantes, tout en soulageant les développeurs d'une partie de la charge mentale. Des éléments très appréciés par Guillaume Duboc, dont la thèse est encadrée conjointement par l'IRIF et Remote, une société qui emploie une cinquantaine d'ingénieurs spécialisés dans Elixir.
En savoir plus
Version 1.17 d'Elixir : Elixir v1.17 released: set-theoretic types in patterns, calendar durations, and Erlang/OTP 27 support - 12 juin 2024 (contenu en anglais)