IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Les raisons de l'adoption accélérée du langage Julia : un langage polyvalent, mais plus scientifique,
Supporte l'introspection et la métaprogrammation, selon Lee Phillips

Le , par Bill Fassinou

218PARTAGES

10  0 
Julia est un langage de programmation conçu par des chercheurs du MIT en 2009 et dévoilé pour la première fois au grand public en 2012. C’est un langage de programmation de haut niveau, performant et dynamique pour le calcul scientifique, avec une syntaxe familière aux utilisateurs d'autres environnements de développement similaires. Julia connaît une croissance fulgurante depuis sa sortie et certains vont même jusqu’à dire qu’il s’agit du langage idéal pour le calcul scientifique, la science des données et les projets de recherche. Un tour d’horizon de certains facteurs qui auraient favorisé son évolution.

Le langage de programmation Julia a connu une augmentation importante de son utilisation et de sa popularité au cours des dernières années. Dans un article sur LWN.net, Lee Phillips, chercheur et activiste du mouvement du logiciel libre, revient sur certains des changements intervenus depuis la première version stable du langage Julia, la version 1.0, dont aucun n'est majeur, ainsi que de nouvelles ressources pour l'apprentissage du langage. Toutefois, l'objet principal de son analyse est une étude de cas qui vise à montrer pourquoi le langage a pris son essor.

Lee rappelle en premier lieu que Julia est un langage polyvalent, mais qui se prête particulièrement bien à la programmation scientifique et aux travaux numériques. Il est un langage dynamique, avec un mode interactif et une syntaxe facile à apprendre, simple pour les programmeurs débutants ; il possède également des niveaux de sophistication plus profonds pour les experts. Julia supporte l'introspection et la métaprogrammation, avec des macros de type Lisp, une syntaxe Lisp optionnelle, et l'accès à des vues des fonctions sous forme d'arbre syntaxique et de langage d'assemblage.


Il dispose d'un système de types riche avec des types performants définis par l'utilisateur, de la répartition multiple de fonctions, mais également de plusieurs modèles de programmation simultanée intégrés. Julia a tout récemment franchi une sorte d'étape de popularité, en entrant dans le top 20 de la liste des langages de programmation de l'IEEE Spectrum. De plus, le langage est adopté dans de nombreux nouveaux projets de recherche, dont : Climate Machine, le moteur de calcul utilisé par la Caltech Climate Modeling Alliance ; une initiative de prévision météorologique spatiale.F

Selon Lee, la conférence annuelle sur Julia, qui vient de se terminer et qui s’est tenue en ligne cette année, est un autre indicateur clé de l'audience que Julia attire. Les présentations auxquelles l’on pouvait s’attendre sur divers sujets informatiques ont été compensées par plusieurs discussions sur les applications à la recherche scientifique dans une variété impressionnante de domaines. Un thème récurrent était la façon dont le langage facilite la collaboration et la réutilisation du code, en donnant aux scientifiques la possibilité de tirer parti des progiciels et des algorithmes des autres. Voici quelques éléments qui ont impulsé la popularité du langage selon Lee.

Étude de cas : le pouvoir de combiner les bibliothèques

Le fait que Julia soit organisé autour du concept de la répartition multiple, combinée à un certain soin apporté par les auteurs de paquets pour écrire du code extensible, crée un contexte où il est inhabituellement facile de combiner les particularités de plusieurs paquets. La répartition multiple signifie en effet qu'une fonction donnée peut être définie avec une variété de méthodes disponibles, chacune opérant sur un ensemble différent de types d'arguments ; la méthode particulière utilisée est choisie au moment de l'exécution, en fonction des types de tous les arguments.

Il est crucial que l'utilisateur d'une bibliothèque soit en mesure de définir de nouvelles méthodes pour les fonctions de la bibliothèque, sans avoir à modifier le code de la bibliothèque existante. L’étude de cas porte sur une activité essentielle pour les sciences informatiques : la solution numérique d'une équation différentielle. Le paquet DifferentialEquations de Julia est devenu la norme à cet égard dans l'écosystème. Des paquets peuvent être ajoutés à Julia à partir de la boucle lecture-évaluation-impression (REPL - read-eval-print loop) en utilisant le gestionnaire de paquets du langage.

Le paquet DifferentialEquations est écrit par Chris Rackauckas, professeur au MIT. Selon Lee, c’est une bibliothèque écrite de façon générique, avec des fonctions pouvant être étendues pour travailler sur de nouveaux types de données. Cela est rendu possible par le système de types de Julia et son organisation autour de la répartition multiple. Pour Lee, c'est la solution de Julia au problème d'expression, qui permet d'étendre et de combiner des bibliothèques existantes sans avoir à modifier ces bibliothèques, ni même à consulter leur code source.

Les changements intervenus dans Julia depuis la version 1.0

Il n'y a pas eu de changements majeurs depuis la version 1.0 de Julia. Toutefois, il y a quelques ajustements mineurs à la syntaxe, qui rendent généralement les choses plus pratiques, qui sont détaillés dans les notes de version pour les v1.5, v1.4, et v1.3. Lee a décrit dans son analyse plusieurs changements plus importants. La dernière version de Julia, Julia 1.5.x, apporte un changement substantiel aux règles de délimitation du champ d'application lors de l'utilisation du REPL. Dans Julia, les blocs tels que les boucles créent leurs propres champs lexicaux.

Les variables qui apparaissent dans ces blocs sont locales au bloc, sauf si elles sont explicitement déclarées comme étant globales. Dans Julia 1.5, lors de l'utilisation du REPL, une affectation à l'intérieur d'un bloc à une variable non déclarée qui existe déjà dans la portée globale utilisera cette variable globale. En ce qui concerne le code dans les fichiers, le même code vous donnera un avertissement, car il est ambigu ; ce changement ne casse aucun code dans les fichiers. Cette solution a été jugée plus pratique pour une utilisation interactive dans le REPL

En effet, il peut être fastidieux, et surprenant pour les débutants, de devoir suivre des variables globales. Néanmoins, ce changement a suscité une certaine controverse, car désormais le même code dans un fichier et dans le REPL se comportera différemment ; cela revient au comportement des versions de Julia antérieures à la version 1.0. Cette version introduit aussi une option syntaxique réduisant le bruit visuel et la frappe au moment de l'utilisation d'arguments de mots-clés. Si vos variables locales ont le même nom que les paramètres nommés d'une fonction, ce qui est souvent le cas, alors un appel de fonction ressemble à function(var1=var1, var2=var2).

C’est la syntaxe normale en Python et dans les versions précédentes de Julia. Elle peut désormais être simplifiée pour devenir function(; var1, var2). En outre, la plainte la plus fréquente concernant Julia est le long temps de démarrage lors de la précompilation d'un paquet. La dernière version a introduit un paramètre expérimental au sein du module pour le niveau d'optimisation du compilateur. La désactivation des optimisations pour le code qui n'est pas crucial pour les performances peut réduire considérablement le temps de compilation et, par conséquent, la latence.

Les ressources d'apprentissage disponibles pour Julia

Selon Lee, ces dernières années, de nouveaux livres et des sites Web utiles sont apparus, ce qui facilite l'initiation à Julia. La documentation officielle en ligne est assez complète et peut être tout ce dont un programmeur expérimenté aura besoin. Mais elle mélange des discussions approfondies sur des sujets avancés avec des sections d'introduction d'une manière qui risquerait de déconcerter un débutant relatif. Parmi les sites Web et les ressources en ligne qui proposent une approche plus douce, il y a Julia By Example, JuliaAcademy, etc.

Lee a déclaré qu’il y a eu une explosion de ressources d'apprentissage, ce n’est qu'un tout petit échantillon. « J'espère que le petit exemple ci-dessus aidera à démontrer, en miniature, ce que Julia a de spécial et pourquoi il fait tant parler de lui dans la communauté scientifique. Julia n'est pas le premier langage à utiliser un système de répartition multiple ; Common Lisp l'a inclus il y a 40 ans. Mais ce fut une percée de combiner cela avec des performances numériques de classe Fortran et avec une syntaxe aussi facile à prendre et à lire que celle de Python », a-t-il déclaré.

Il finit en disant que Julia vaut certainement la peine d'être considérée pour un scientifique ou un ingénieur qui commence un nouveau projet. « Bien qu'il n'ait pas encore la vaste couverture des bibliothèques Python, il est particulièrement facile d'appeler des fonctions Python (et Fortran ou C) à partir du code Julia, et le code Julia s'exécutera, en temps normal, rapidement. Pour tous les autres, je peux recommander Julia simplement comme un langage intéressant, amusant et instructif à utiliser », a conclu Lee.

Source : Lee Phillips

Et vous ?

Êtes-vous un développeur Julia ? Pourquoi avez-vous opté pour ce langage ?
Quel autre langage pour le calcul scientifique préféreriez-vous et pourquoi ?

Voir aussi

Le langage de programmation Julia gagne de plus en plus en popularité au sein de la communauté scientifique, depuis janvier 2018

Julia 1.5 : installation et mise en route avec Visual Studio Code, un billet de blog de Daniel Hagnoul

Après Redmonk, c'est au tour de l'Index TIOBE de mettre Python dans le top 3 des langages les plus populaires, Julia gagne également en notoriété

Sortie de Julia 1.0 et 0.7. Le langage de programmation scientifique atteint sa première version stable après six ans de développement public

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 22/10/2020 à 1:08
Citation Envoyé par Jeff_67 Voir le message
Par contre, contrairement à ce qu'on peut lire régulièrement en ligne, je doute que Julia ne remplace totalement Python à terme. Ces deux langages sont complémentaires, mais pas du tout faits pour les mêmes usages.
Quelles différences vois-tu dans les usages ? J'avais cette opinion de Julia lorsque j'ai commencé à l'utiliser (versions 0.3 à 0.6), mais je me dis de plus en plus que Julia tend à être de plus en plus utilisable pour des choses pour lesquelles il n'a jamais été prévu, je pense notamment à tout ce qui est Web (dans le même genre, Python a réussi à avoir une communauté suffisante pour s'ouvrir à la science des données, alors que rien du tout ne l'y prédestinait, surtout pas sa performance au niveau des calculs matriciels). Plus je vois ce qu'il est possible de faire avec des DSL en Julia (à l'aide de macros), plus je me dis que le langage pourra aller loin !
3  0 
Avatar de
https://www.developpez.com
Le 22/10/2020 à 14:06
Citation Envoyé par Supernul Voir le message
Un utilisateur qui utilise très majoritairement numpy, scipy, scikit-learn, pandas qui ont des backends en C, C++ et Fortran, et matplotlib qui est souvent le backend pour Plots de Julia, a-t-il un intérêt à passez à Julia ?
Pour quelqu'un qui connait déjà Python et n'a pas de problème de performances, il est certainement peu intéressant de passer à Julia.

Pour quelqu'un qui ne connait ni l'un ni l'autre, la question peut effectivement se poser. Les deux langages sont à peu près aussi accessibles. Python a plus de libs dans certains domaines mais Julia a un très bon package manager.

Enfin, Julia peut être très intéressant pour des utilisateurs plus "avancés", notamment avec son système de macro et son potentiel de performances. Avec Python, c'est vite compliqué d'optimiser son code dès qu'on ne peut plus se reposer sur une lib déjà optimisée : il faut passer par des outils comme cython, numba ou réécrire du code en C ou en C++. Avec Julia, il "suffit" d'appliquer quelques bonnes pratiques, décrites dans la doc, et on arrive généralement à des perfs assez proche du C, sans changer de langage.
1  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 22/10/2020 à 19:40
Citation Envoyé par Supernul Voir le message
Un utilisateur qui utilise très majoritairement numpy, scipy, scikit-learn, pandas qui ont des backends en C, C++ et Fortran, et matplotlib qui est souvent le backend pour Plots de Julia, a-t-il un intérêt à passez à Julia ?
Plots.jl a une interface extrêmement différente de matplotlib : Plots.jl a une interface réfléchie, matplotlib est une copie de l'exécrable interface de MATLAB pour les graphiques. Avec Plots.jl, tu peux plus facilement créer des animations. (J'aurais plutôt dit que GR est le moteur le plus courant de rendu, vu le peu de dépendances par rapport à matplotlib.)

Si tu n'arrives pas à écrire un code assez vectoriel avec numpy & co., tu pourras l'écrire en Julia et quand même avoir une bonne optimisation de ce code.

Pandas n'est pas une bibliothèque que je recommanderais chaudement, avec son interface assez particulière (iloc, loc et les trente-six façons de se tirer une balle dans le pied temporaire), DataFrames.jl a une interface que je trouve plus intuitive : https://juliadata.github.io/DataFram...n/comparisons/.
1  0 
Avatar de
https://www.developpez.com
Le 21/10/2020 à 16:53
Par contre, contrairement à ce qu'on peut lire régulièrement en ligne, je doute que Julia ne remplace totalement Python à terme. Ces deux langages sont complémentaires, mais pas du tout faits pour les mêmes usages.

Le fait que la compilation statique ne soit pas aisée en Julia ne pousse pas non plus à l'abandon total du C et du Fortran.
0  0 
Avatar de Supernul
Membre actif https://www.developpez.com
Le 22/10/2020 à 8:52
Plutôt qu'une réponse, ce sont des questions que je me pose :

Un utilisateur qui utilise très majoritairement numpy, scipy, scikit-learn, pandas qui ont des backends en C, C++ et Fortran, et matplotlib qui est souvent le backend pour Plots de Julia, a-t-il un intérêt à passez à Julia ?

On voit souvent des benchmarks qui montrent que Julia est plus rapide que Python, or si on regarde plus attentivement ces benchmarks utilisent des méthodes/caractéristiques avancées de Julia. Dans quelle mesure cela est représentatif de ce que peut écrire une grande parties des utilisateurs "non informaticiens" ou n'ayant pas une compétence avancée en algorithmique et dans le langage lui-même ?

Par exemple, j'ai retravaillé un code d'un ami économiste qui utilise numpy car plus rapide que des listes de listes. Mais il utilisait des boucles for pour parcourir les tableaux. Une approche vectorisée permet de s'affranchir des boucles et divise par plus de 130 le temps de calcul de certaines parties du "programme".
0  0 
Avatar de abriotde
Membre chevronné https://www.developpez.com
Le 22/10/2020 à 14:05
Dans quelle mesure cela est représentatif de ce que peut écrire une grande parties des utilisateurs "non informaticiens" ou n'ayant pas une compétence avancée en algorithmique et dans le langage lui-même ?
Python n'est pas efficace dans sa conception et doit être interprété en live car il est totalement dynamique. En Julia ça n'est pas du tout le cas, le langage est conçu pour être typé (même si c'est assez caché à l'utilisateur lambda) et donc compilé a l'avance. Du coup plus besoin de remplacer le for, il sera naturellement plus optimisé par le langage lui même.

Bien sûr un informaticien fera toujours un code plus optimisé mais cela sera moins souvent nécessaire. Surtout les nombreuses librairies "patch" de Python destiné a lui faire gagner en performances seront moins utiles.

A la question est-ce que tous les programme des scientifiques utilisant numpy et Cie doivent être réécris, je dirais probablement pas. Julia n'est pas encore assez populaire et nécessaire. Si ça marche, on garde. Par contre s'il faut une refonte plus profonde (surtout s'il faut améliorer les performances) là la question se pose vraiment.

Je pense que Julia remplacera Python mais pas demain, ce sera long et jamais total. Pas avant 10 ou 20 ans. Python est trop bien implanté.
0  0