Du neuf sur Julia 0.7

Après la réécriture du moteur d’optimisation, les fonctionnalités du langage seront prêtes pour la 1.0

Julia, le langage de programmation orienté calcul scientifique moderne (aussi simple à utiliser que Python ou MATLAB, aussi performant que Fortran ou C++), n’est pas un grand habitué du respect des dates : l’arrêt des fonctionnalités pour la version 1.0 était prévu pour la mi-décembre… mais ce n’est toujours pas le cas à la mi-mars ! Comme depuis longtemps, cette version est annoncée pour “bientôt” : pendant ce temps, les développeurs peaufinent le langage et son environnement, pour qu’il soit aussi agréable que possible dès le premier jour de la 1.0. C’est aussi pour cela que la version 0.7 sortira plus tôt : elle contiendra toutes les nouveautés de la 1.0, avec quelques couches de compatiblité avec les précédentes versions.

Un très gros point bloquant pour le moment est la réécriture complète de l’optimiseur de Julia. En effet, pour atteindre un très haut niveau de performance, l’implémentation du langage utilise un moteur de compilation très performant (LLVM, aussi derrière Clang ou Flang), couplé à une série de passes d’optimisation spécifiques à Julia. Les dernières versions de Julia ont profondément modifié certains aspects du système de type, notamment pour gérer les valeurs manquantes dans les tableaux de données : au lieu d’un type spécifique, elles sont maintenant représentées par une union (soit rien, soit une valeur d’un type donné). De plus, le protocole des itérateurs change complètement, notamment pour être plus simple à implémenter : il se réduit à une fontion iterate de l’état courant, qui renvoie soit rien (s’il n’y a plus d’élément suivant), soit un nouvel état et la valeur associée — soit le même genre d’union que pour les valeurs manquantes. Cependant, la passe d’optimisation précédente était incapable de générer du code décemment rapide pour ces cas particuliers : pour garder une bonne performance, la réécriture était nécessaire.

Ce retard dû à l’optimiseur laisse du temps pour travailler sur d’autres points, notamment la gestion des tableaux. D’autres points restent toujours en suspens : moins importants (ils ne risquent pas de casser du code existant), ils pourront être intégrés par la suite, dans le cycle de vie de Julia 1.x. La vitesse de compilation en fait partie.

La gestion des paquets est aussi un chantier pour la première version stable à long terme de Julia. Elle est actuellement prise en charge par Pkg2, un utilitaire développé du temps de Julia 0.1 et qui commence à montrer ses limites : par exemple, pour les dépendances, il n’est possible que d’indiquer des dépendances dures. Impossible de représenter une dépendance à l’un d’une série de paquets (on souhaite simplement qu’au moins un des paquets de cette liste soit installé) ou des fonctionnalités conditionnelles (activer certaines fonctionnalités d’un paquet quand un autre est installé). La principale barrière au déploiement de la nouvelle version du gestionnaire de paquets, la bien nommée Pkg3, est qu’elle n’est compatible qu’avec les préversions actuelles de Julia 0.7… et que peu de paquets sont compatibles. Il manque aussi l’expressivité des versions requises pour l’installation d’un paquet (au moins telle version jusque telle autre en excluant une troisième, par exemple). Énormément d’architecture est déjà en place, comme la conversion automatique des descriptions de paquets au nouveau format : le grand jour, il sera possible de proposer automatiquement à tous les projets enregistrés dans le gestionnaire de paquets une description au nouveau format.

Dans la même rubrique

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 23 |

Actu en image