Julia
Depuis une vingtaine d'années, les chercheurs utilisant du calcul scientifique vivent avec une contrainte qui ralentit leur travail : il faut choisir entre un langage facile à utiliser pour tester des idées et un langage qui tourne vite pour produire des résultats. Quand on veut prototyper, on utilise Python ou MATLAB. Mais dès qu'on veut des calculs sérieux, on reprend tout en C++ ou en Fortran. Cette gymnastique permanente entre deux langages fait perdre du temps et complique les projets sans raison valable.
C'est ce problème que Jeff Bezanson, Alan Edelman, Stefan Karpinski et Viral Shah ont décidé d'attaquer en 2009 au MIT. Ils veulent créer un langage qui réunirait la simplicité des langages dynamiques et la vitesse des langages compilés. Un pari audacieux, car ces deux qualités semblent contradictoires par nature.
La première version de Julia sort en 2013. Dès le début, le langage vise le calcul scientifique avec une architecture pensée pour les opérations sur les tableaux multidimensionnels, à la manière de Fortran. Le moteur repose sur LLVM, qui génère du code machine adapté aux différentes architectures matérielles. Julia compile le code à la volée, au moment où il s'exécute. Cette compilation just-in-time réconcilie deux mondes qu'on croyait séparés : la réactivité d'un langage interprété et la rapidité d'un programme compilé.
L'originalité de Julia tient surtout à son système de dispatch multiple. Contrairement aux langages objets classiques où une méthode dépend du type d'un seul objet, Julia choisit la bonne fonction selon les types de tous les arguments. Ce mécanisme rend le code beaucoup plus flexible et facilite la composition de bibliothèques qui n'ont pas été conçues ensemble. Le langage intègre aussi des macros puissantes, du calcul parallèle natif, et dialogue sans friction avec du code C ou Fortran existant.
La communauté se structure. En 2014 a lieu la première JuliaCon, qui se transforme vite en un rendez-vous annuel. Trois ans plus tard, le registre compte déjà plus de 1 000 paquets. Des entreprises de poids commencent à s'y intéresser : Aviva et la Federal Reserve Bank of New York côté finance, Pfizer, Moderna et AstraZeneca dans la pharmacologie, ASML pour les semi-conducteurs.
Les performances surprennent. Des benchmarks montrent que certaines fonctions mathématiques écrites en Julia pur tournent plus vite que leurs équivalents optimisés en C ou Fortran. L'implémentation de la fonction inverse de la fonction d'erreur bat celle de MATLAB d'un facteur 3 ou 4, et celle de SciPy de 2 à 3. Cette vitesse vient des techniques de métaprogrammation et de génération de code que Julia exploite naturellement, là où un langage de bas niveau demanderait des contorsions.
Le nom de l'environnement Jupyter rappelle le lien avec Julia (avec Python et R). Ces notebooks, qui mélangent code, résultats, graphiques et texte, collent bien aux besoins de l'enseignement et de la recherche reproductible. Le MIT et d'autres universités l'utilisent maintenant pour leurs cours de calcul numérique.
Julia fonctionne sur diverses architectures : processeurs ARM et GPU. Le gestionnaire de paquets intégré simplifie la gestion des dépendances et garantit la reproductibilité des environnements. Des outils automatisent la création de passerelles vers les bibliothèques C++, ce qui donne accès à un patrimoine logiciel considérable.
En 2022, Julia s'attaque à des projets scientifiques de grande ampleur. La Climate Modeling Alliance s'en sert pour la modélisation climatique, le projet Celeste pour le traitement d'images astronomiques, des équipes de physique des hautes énergies pour l'analyse de données. Ces applications montrent que le langage tient la distance sur des calculs complexes et massifs, sans sacrifier la lisibilité du code.
Le développement suit une logique open source classique, avec le code sur GitHub. Entre 2009 et 2017, plus de 40 000 commits s'accumulent. Les contributions passent par une revue stricte qui maintient la qualité. La documentation fournie et les tutoriels en ligne aident les nouveaux venus à entrer dans le langage sans trop galérer.
Les choix de départ se révèlent judicieux pour suivre l'évolution du calcul scientifique. L'équipe continue d'améliorer les temps de compilation, d'optimiser automatiquement le code, de supporter les nouvelles architectures. Le fil rouge reste le même : un langage unique qui combine facilité et performance.
Julia montre qu'on peut repenser les langages de programmation pour transformer les pratiques scientifiques. En résolvant élégamment le problème des deux langages, il a changé ce qu'on attend d'un outil de calcul : la productivité sans compromis sur la vitesse.