Julia vs Python

Julia est un challenger à Python dans le domaine scientifique, chacun disposant d'une bibliothèque étendue. Le nouveau venu peut-il remplacer l'ancien? (Python date de 1991).

Démo Langage de programmation Julia
Exemple de code en langage Julia

Le développement de Julia a débuté en 2009 et le langage s'est popularisé lorsque le compilateur est devenu open source en 2012. Il est actuellement disponible sous licence MIT. L'objectif est de créer un langage ayant les avantages de Python (la simplicité et le dynamisme), de R (les traitements statistiques), de C (la rapidité d'exécution), de Perl (le traitement des chaînes), de Mathlab (l'algèbre linéaire), et d'autres encore. Il veut aussi être distribué, générique.
Dans la tradition de Pascal, le nom du langage vient du mathématicien français Gaston Julia, découvreur des fractales.

Sa simplicité et ses capacités scientifiques en font une alternative possible à Python. Mais est-il supérieur? Il est généralement nettement plus rapide que Python, qui recourt à des bibliothèques écrites en C pour compenser la lenteur de l'interpréteur. Lequel est le plus rapide pour exécuter un algorithme est important mais ce qui compte surtout est comment ils se comportent sur de grands ensembles de données, des calculs matriciels par exemple. Voir Benchmarks.
L'avantage sur Python est que les bibliothèques peuvent être écrites aussi en Julia et compilées alors qu'il faut recourrir à un langage différent pour ajouter des fonctions rapides à Python.

On comparera aussi les fonctionnalités et la syntaxe. Les deux langages se veulent faciles à comprendre et s'adressent avant tout à un public qui n'a aucun intérêt dans le hardware, et donc dans les langages dérivés de C tels que Go qui sont fait pour simplifier la tâche du compilateur et non améliorer la productivité du programmeur.

Similitudes

Différences

Introduction à la syntaxe de Julia

Fonction

La définition commence par le mot clé function et se termine par end. Cela est classique, mais non optimal, le langage Scriptol simplifie en terminant une fonction par return ou return suivi d'une valeur de retour.

Une fonction peut aussi être définie en assignant une expression à un nom avec des arguments. Par exemple:

fun(x) = x * 5

println(fun(2))

Ce qui doit afficher 10.

Ce qui est propre à ce langage, est que la valeur de retour est le résultat de la dernière expression évaluée, sauf si une instruction return est explicitement insérée dans le corps de la fonction.
Les tableaux sont passés par références en arguments et donc peuvent être modifiés à la suite de l'appel à une fonction.

Les opérateurs sont des fonctions. On peut assigner le symbole + à une fonction f, et faire un appel f(x, y) qui retournera la somme des deux arguments.

Structures de contrôle

La structure if est similaire à celle de PHP ou Python.

La boucle for à la forme:

for i = 1:n
 ... 
end 

Ce qui est aussi simple que Python quoi qu'avec une syntaxe différente.

L'itération sur un conteneur, à la même forme qu'en Scriptol ou autres langages modernes:

for s in [1, 2, 3]
 ... 
end

Le boucle while est classique:

while a < 5
  a += 5
end

Il n'y a pas d'autre structure de contrôle. Pas de until, de switch. Le pattern matching n'est pas envisagé par les créateurs.

Classes et homoiconicité

Les classes sont des types composites dans lesquels sont imbriqués des fonctions qui deviennent ainsi leur méthodes.

type myclass 
   function f(x, y)
     ....
   end
end

Il n'y a pas de prototypes comme en JavaScript pour ajouter des membres de façon dynamique, mais puisque un programme peut se modifier et s'étendre du fait de l'homoiconicité, il doit donc être possible de modifier les objets et leur ajouter des attributs et méthodes...

Cela est traité dans le manuel, mais les exemples ne sont pas très lumineux. J'en retiens pour le moment que la fonction eval, comme en JavaScript, permet d'évaluer et intégrer du code au programme, et que diverses commandes existent pour "l'introspection", l'accès du code à lui même comme donnée.

Dois-je utiliser Julia?

Je suis vraiment impressionné par les possibilités de ce langage. Go et Dart à coté ont l'air d'avoir été conçus à une autre époque. Python est laissé très loin en arrière mais il a l'excuse d'avoir été effectivement conçu à une autre époque.
Julia a toutes les fonctionnalités de Python et même beaucoup plus, le code est tout aussi simple à écrire, il dispose de bibliothèques similaires dans le domaine scientifique et semble donc constituer une alternative. Il permet même d'utiliser les bibliothèques de Python.

Il n'est pas parfait pour autant. Rien n'est prévu pour le pattern matching, quelque chose qui est très développé dans Scala, autre langage moderne et innovateur. Les objets ne supportent pas l'héritage ni les compositions ce qui exlut les applications larges.
La documentation est succincte et peu compréhensible. La plupart des exemples sont en ligne de commande et c'est peu lisible.
Les messages d'erreurs surtout étaient le point faible lors de mon premier essai en 2014. La plupart des erreurs à l'intérieur d'une fonction sont signalées sur la ligne 1, qui est la ligne ou commence la fonction et étaient donc difficiles à localiser.
Mon expérience pour implémenter le crible d'Erasthothènes fût laborieuse à l'époque mais serait facile avec la version actuelle.

Mise à jour du 23 avril 2017

Le langage a beaucoup évolué depuis le premier test réalisé en 2014:


Julia Studio est un EDI gratuit dédié à ce langage.

Julia vs Python. Comparaison des langages.

Julia On Wasm. Comment compiler Julia en WebAssembly. Expierimental.

Références: Le site de Julia. Les auteurs sont Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman.

Langages de programmation et de données Asm.js - Basic - C - C++ - C# - Dart - Eiffel - Go - Java - JavaScript - Julia - Pascal - PHP - Python - Prolog - Ruby - Scala - Scriptol - Swift - TypeScript - HTML - Wasm - XML - XAML - SQL