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

Le , par dourouc05, Responsable Qt
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.

Sources : 1.0 progress/status, Pkg3 plan and status.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de onilink_ onilink_ - Membre actif https://www.developpez.com
le 28/03/2018 à 16:47
J'aimerais bien voir les benchmarks avec C++, car ça m'étonne.
Surtout que sur le site officiel y a pas C++, mais C, et avec une version du compilateur assez vielle: https://julialang.org/benchmarks/
Avatar de Gugelhupf Gugelhupf - Modérateur https://www.developpez.com
le 28/03/2018 à 20:43
Salut @onilink_,

Le fait d'obtenir de meilleurs performances par rapport à du C ou C++ ne doit pas forcément surprendre, il suffit de mettre en avant les algorithmes où la techno que tu souhaites mettre en valeur s'en sort le mieux (et puis rien ne dit que Julia ne triche pas avec le garbage collector ). J'aurais bien aimé voir le code source développé pour chacun de ces tests, tu sais où on peut les trouver ?

A+
Avatar de SimonDecoline SimonDecoline - Membre éprouvé https://www.developpez.com
le 28/03/2018 à 21:10
Citation Envoyé par Gugelhupf Voir le message
Salut @onilink_,

Le fait d'obtenir de meilleurs performances par rapport à du C ou C++ ne doit pas forcément surprendre, il suffit de mettre en avant les algorithmes où la techno que tu souhaites mettre en valeur s'en sort le mieux (et puis rien ne dit que Julia ne triche pas avec le garbage collector ). J'aurais bien aimé voir le code source développé pour chacun de ces tests, tu sais où on peut les trouver ?

A+
https://github.com/JuliaLang/Microbenchmarks

D'où ça vient que Julia est plus performant que C ou C++ ? Pour avoir pas mal utilisé Julia et un peu fréquenté sa communauté, j'ai plutôt observé et entendu que Julia était environ 30% plus lent (pour un effort d'optimisation raisonnable).
Avatar de onilink_ onilink_ - Membre actif https://www.developpez.com
le 29/03/2018 à 9:42
Citation Envoyé par SimonDecoline Voir le message
https://github.com/JuliaLang/Microbenchmarks

D'où ça vient que Julia est plus performant que C ou C++ ? Pour avoir pas mal utilisé Julia et un peu fréquenté sa communauté, j'ai plutôt observé et entendu que Julia était environ 30% plus lent (pour un effort d'optimisation raisonnable).
Dans la première ligne de la news on a "aussi simple à utiliser que Python ou MATLAB, aussi performant que Fortran ou C++" et dans les benchs officiels quelques tests sont sensés être plus rapides qu'en C.
Merci pour le lien en tout cas, je ne vois pas de C++ et ça donne une meilleur idée sur les tests.

@Gugelhupf
J'ai un peu pensé a la même chose sur le coup, reste a faire les tests soit même
Bon après je ne suis pas utilisateur de Julia, mais connaissant un peu les principe du langage ça me paraissais très étonnant.
On peut pas avoir le beurre et l'argent du beurre, même s'il existe un juste milieu intéressant.
Avatar de Theta Theta - Membre éclairé https://www.developpez.com
le 29/03/2018 à 11:37
De toute façon Julia a été pensé comme successeur de langages comme R ou MATLAB desquels elle reprends certains principes, et qu'elle n'a aucun mal à surclasser au niveau niveau perfs (avec facteur 100 facile).

Après que certains devs C/C++ s'intéressent à Julia je le comprends aussi, mais je ne suis pas sur que le choix entre les deux technologies se fasse sur les 30% de différence.
Avatar de SimonDecoline SimonDecoline - Membre éprouvé https://www.developpez.com
le 30/03/2018 à 0:08
Citation Envoyé par onilink_ Voir le message
Dans la première ligne de la news on a "aussi simple à utiliser que Python ou MATLAB, aussi performant que Fortran ou C++"
Oui, c'était bien le sens de ma question car ce que j'ai vu de la communauté Julia n'est pas aussi catégorique : les gens parlent plutôt de "30% plus lent que C++" ou de "performances approchant C++".

Citation Envoyé par onilink_ Voir le message
et dans les benchs officiels quelques tests sont sensés être plus rapides qu'en C.
Il y a effectivement 2 tests plus rapides et aussi 3 tests beaucoup plus lents, et ce ne sont que des micro-benchmarks.

Citation Envoyé par onilink_ Voir le message

Bon après je ne suis pas utilisateur de Julia, mais connaissant un peu les principe du langage ça me paraissais très étonnant.
On peut pas avoir le beurre et l'argent du beurre, même s'il existe un juste milieu intéressant.
Quels sont ces "principes" qui invalident ce que prétend la communauté Julia (et que j'ai moi-même observé sur plusieurs projets) ? Parce que l'argument du beurre, c'est moyennement convainquant.
Responsable bénévole de la rubrique HPC : Thibaut Cuvelier -