Langages informatiques

Les chiffres de GitHub Archive and GHTorrent compilés par Ben Frederickson montrent l’érosion des JavaScript, Java et C en termes d’utilisateurs actifs par mois (MAU) alors que la communauté Python semble désormais stabilisée.
Langages informatiques

Quoi de neuf ? Connaissez-vous Julia ?

Chaque année, une flopée de nouveaux langages informatiques est proposée par les chercheurs et les éditeurs de logiciels. Chacun d’eux vise à être plus simple, plus efficace, plus élégant que les langages actuels, mais bien peu séduisent les développeurs. 2018 n’échappera pas à la règle. À la fin de l’été, le MIT annonçait la release 1.0 de Julia, un nouveau langage sur lequel les chercheurs travaillent depuis 2009. Avec plus de 700 contributeurs, 1 900 packages enregistrés et déjà 2 millions de téléchargements, ce langage démarre avec une communauté plutôt dynamique. Julia est un langage dédié aux data sciences sur une niche déjà occupée par le langage R, MatLab et surtout Python, un langage créé il y a une trentaine d’années mais qui bénéficie d’une popularité sans failles auprès de millions de développeurs. Aujourd’hui, les développeurs sont habitués aux annonces de nouveaux langages tous plus révolutionnaires et meilleurs les uns que les autres et beaucoup de ces langages peinent à assembler des communautés de développeurs réellement significatives. Pierre Murasso, co-fondateur de C17 Engineering explique : « Très peu de langages parviennent à émerger et être adoptés de manière massive et pérenne. Il faut avoir des raisons légitimes de passer sur un nouveau langage sachant que l’aspect legacy pèse beaucoup. Les entreprises doivent maintenir les codes existants et donc veulent le pérenniser en embauchant des développeurs maîtrisant ces langages parfois assez anciens. En parallèle, pour pouvoir s’imposer, un langage doit pouvoir s’appuyer sur une communauté énorme. » Le dernier classement de popularité des langages de Tiobe le montre, les vieux langages ont la vie dure : Java, C/ C++, Python trustent les premières places devant… Visual Basic. En tête de classement, les langages des années 90 côtoient le langage C, dont la première version remonte aux années 70 ! L’étude de Ben Frederickson montre que les Go, TypeScript, Kotlin et Rust sont les langages qui connaissent la plus forte progression ces derniers mois. La taille des communautés pratiquant le langage Go et TypeScript se rapprochant désormais de celle pratiquant les C et C#, sachant toutefois que cette étude exclut mécaniquement tous les projets qui ne sont pas hébergés sur GitHub.

Nouveaux usages, nouveaux langages

Certains nouveaux usages rebattent les cartes. C’est le cas du Big Data qui a suscité de multiples initiatives, dont ce Julia du MIT, mais qui a aussi remis en course le langage R, dont l’origine remonte à 1993. Pour créer ce langage, des chercheurs ont repris les travaux d’un certain John Chambers, alors qu’il travaillait dans les laboratoires Bell sur l’analyse des données entre 1975 et 1976. Depuis, le langage R s’est imposé dans le Big Data grâce à une forte communauté universitaire et un nombre de packages statistiques assez unique. Pourtant, le R n’est pas exempt de tout défaut, comme l’explique Didier Verna, enseignant-chercheur au laboratoire de recherche et développement de l’Epita : « Du point de vue langage, il est difficile de faire pire que R, un ovni basé sur Lisp extrêmement mal conçu et peu performant. C’est une aberration que R ait gagné autant de notoriété auprès des statisticiens, et cela peut s’expliquer d’une part parce que beaucoup d’entre eux ne sont pas à la base des informaticiens, donc peu sensibles aux aspects de conception et de génie logiciel. » Pour le traitement des données, Microsoft a proposé le F#, un langage fonctionnel bien adapté à la manipulation de données qui pourrait se placer entre les C# et R. Ce langage de développeur peine à s’imposer dans les communautés Data Science en dépit d’atouts indéniables comme sa simplicité, comparé à Haskell, ou encore son intégration à l’écosystème Microsoft. « Le F# est intéressant d’un point de vue syntaxique, mais n’offre pas une rupture assez importante pour rallier à lui une communauté suffisante pour en faire une référence », estime Pierre Murasso. Les développeurs ont à leur disposition de nombreux langages de programmation fonctionnelle plus ou moins directement inspirés du langage Lisp, tels que les Haskell, Scala, Erlang, OCml ou encore F#, plus particulièrement destiné à la communauté Microsoft.

Les « vieux » résistent

De facto, lorsqu’on regarde les chiffres d’activité de GitHub, sur les 337 langages de programmation représentés, le JavaScript génère la plus grosse activité, avec 2,3 millions de pull-request, devant les Python (1 million), Java, Ruby, PHP et C++. Ben Frederickson s’est livré à une analyse des données d’activité publiées sur GitHub Archive et GHTorrent et en termes de nombre d’utilisateurs actifs par mois, JavaScript, Python et Java dominent les débats, devant les C++, C et PHP. Néanmoins, sur la durée, la domination du JavaScript s’érode depuis 2013/14, de même que celle de Java depuis 2015/2016. Seul le Python conserve une dynamique de croissance parmi ces « grands langages », sachant que les PHP, Ruby, Objectif-C et CoffeeScript connaissent des fortes baisses en proportion du nombre d’utilisateurs de GitHub. La hausse presque exponentielle du nombre d’utilisateurs de GitHub relativise ces baisses d’intérêt car en valeur absolue, le PHP plafonne à son zénith et les baisses subies par les Ruby et Objectif-C les ramènent à leur niveau de 2015. Côté mobile, le langage Objectif-C a passé le relais au Swift chez les développeurs iOS tandis que le CoffeeScript cède sous la pression du TypeScript. Ce phénomène de passation de pouvoir est d’ailleurs en train d’avoir lieu sur le langage R. La star de la grande vague du Big Data des années 2012 à 2016 est en train de voir les Data Scientists se ruer sur Jupyter Notebook, un outil de calcul qui supporte une quarantaine de langages mais lui-même issu de la communauté Python. Dans les chiffres traités par Ben Frederickson, ce sont les données relatives aux plus grosses croissances enregistrées qui sont les plus intéressantes. TypeScript connaît une croissance fulgurante depuis la fin 2015, de même que Go, le langage mis au point par Google en 2009 pour ses besoins internes. Si les experts ont immédiatement souligné la simplicité du langage, cette simplification s’est faite au prix de la suppression de concepts importants de la programmation objet tels que l’héritage et les génériques qui sont passés à la trappe. Ses concepteurs ont pensé le Go pour l’automatisation des tâches et multitâche et la programmation concurrente sont ses points forts. Autre langage qui mérite le détour, le Kotlin connaît une grosse vague d’adoption depuis 2018, lorsque Google a annoncé son support  sur la plate-forme Android. Pour Laurent Daverio, chercheur à l’école des Mines ParisTech, « le Kotlin est soudainement devenu très populaire chez les développeurs Android, l’an dernier. Car on se rend compte que c’est un “ Scala lite ”, développé par une société de St-Petersbourg qui veut mettre en opposition le monde réel et les “ savants cosinus ” déconnectés des besoins des développeurs. » Si le Kotlin a attiré à lui bon nombre de développeurs, reste aux librairies et framework à gagner en qualité afin de faire de Kotlin un langage de référence pour les applications mettant en œuvre la JVM.

Un succès d’estime pour Rust, un langage orienté sécurité

Un autre langage qui connaît une croissance significative, bien que plus modeste, le Rust. Ce langage est une création de la fondation Mozilla dont la vocation initiale était d’être plus sûre que le C/C++. L’objectif final de ce langage de bas niveau était bien de remplacer le C++. Rust 1.0, première version stable du langage a été publié en 2015 et c’est en 2016 que le langage a suscité le plus d’échanges, en lien avec la faille de sécurité DNS affectant la librairie glibc de Linux. Robert O’Callahan développeur chez Mozilla a lancé l’idée qu’il était temps de redévelopper tous les logiciels critiques développés en C/C++ en Rust. Un billet qui a beaucoup suscité de discussions à l’époque et mais est bien évidemment resté lettre morte dans les faits tant il serait coûteux de redévelopper l’existant C/C++. La communauté Rust continue néanmoins de croître, parviendra-t-elle à atteindre une masse critique pour en faire le langage sécurisé de référence ? Bien difficile de l’affirmer. Si une entreprise jeune comme Criteo a su évoluer, passant du .NET au Java pour s’intéresser finalement aux langages fonctionnels et au Scada, pour finalement créer un improbable mix de Java et Scale baptisé ScaVa, les entreprises plus traditionnelles cherchent généralement à capitaliser au maximum sur le ou les quelques langages que leurs équipes maîtrisent déjà. Les développeurs eux-mêmes restent attachés à leur langage de prédilection, même si celui-ci accuse le poids des ans. « Personnellement je suis resté au Python, et je n’ai rien trouvé de mieux pour l’instant », reconnaît Laurent Daverio. « J’ai toujours été très impressionné par les essais de Paul Graham, qui place le Lisp au sommet de la hiérarchie des langages. À ce point de ma carrière, à 51 ans, si je devais apprendre un langage pour détrôner le Python dans le développement web, autant viser haut et choisir un langage de la famille Lisp. » Dernier rejeton de la riche famille Lisp, Racket, un langage à suivre pour de nombreux experts.

Démos bluffantes et effets de mode

Peu d’entreprises comme Netflix peuvent se payer le luxe de laisser à leurs développeurs le soin de choisir le langage qu’ils jugent le mieux adapté à leur projet. Pourtant, beaucoup de langages créés par des chercheurs présentent d’évidentes qualités techniques et les démonstrations sont souvent bluffantes. Pourtant, leur adoption peine à dépasser certaines niches. L’exemple d’OCaml, le langage créé par l’Inria est parlant. Créé par les chercheurs français en 1996, ce langage de programmation fonctionnelle a connu quelques succès. Il a notamment été utilisé pour développer Astrée, l’analyseur de code qui a été utilisé sur les logiciels de commande de vol des Airbus A340 et A380, développé en Caml et le langage a donné naissance à Reason, une nouvelle syntaxe de OCaml qui est aujourd’hui utilisée dans la nouvelle version web de Facebook Messenger. Autre descendant d’OCaml, Ocsigen, un framework dédié au développement web notamment utilisé sur le site Be Sport. Le fossé entre les langages appréciés des chercheurs – où Lisp et ses nombreux dérivés font figure de modèle incontournable – et les langages réellement exploités par les développeurs en entreprises semble bien difficile à combler. On se souvient il y a quelques années de l’effervescence des développeurs autour de Clojure, un langage compilé inspiré de Lisp et pouvant s’exécuter sur une JVM, ce qui a particulièrement trouvé écho dans la communauté Java. Le soufflé semble être un peu retombé sur ce langage qui présentait d’incontestables atouts, notamment dans le développement d’applications multitâches. Aujourd’hui, c’est Racket qui fait beaucoup parler de lui. Anciennement nommé PLT Scheme, ce descendant du langage Scheme – lui-même issu de la lignée Lisp – avait initialement une vocation pédagogique et, de fait, il rassemble à peu près tout ce qui se fait de bien autour des langages aujourd’hui. Parviendra-t-il à sortir du cercle des labos de recherche et des hobbyistes pour séduire les entreprises ? La balle est dans le camp des développeurs... et de leurs DSI. ❍

Julia, un langage très intéressant pour le calcul scientifique à haute performance

Didier Verna, enseignant-chercheur en informatique au laboratoire recherche et développement de l’Epita (LRDE)

« Julia est une tentative de repartir plus ou moins de zéro pour concevoir un langage à haute performance en vue d’applications scientifiques, notamment pour les statistiques, qui cherche à récupérer les communautés Python et R. Bien que cela ne soit pas forcément très visible, le noyau de Julia est un petit Scheme, ce qui pour moi – en tant que « Lisper » – est déjà un point de départ attractif. Je pense que Julia est effectivement un langage performant et peut, de ce point de vue, conquérir les utilisateurs du Python ou du langage R. Le langage Julia bénéficie d’une base de bibliothèques « prêt-àporter » déjà importante et il réussit à mélanger les paradigmes statiques et dynamiques. Le typage dynamique est bon pour des tas de choses, mais pouvoir aussi typer statiquement quand on a besoin de très hautes performances est également important. Le système de typage optionnel de Julia permet un tel mélange, et le support des types paramétriques lui confère une grande expressivité D’une manière générale, j’apprécie de voir l’influence de Lisp dans Julia. Ce langage est homoiconique, ce qui lui confère une capacité de réflexivité et de méta-programmation importante. Toutes les fonctions du langage sont polymorphes (multi-méthodes), ce qui pousse le concept plus loin qu’en Lisp. Le Julia dispose également de co-routines dont je regrette l’absence en Lisp. Cependant, il y a aussi des choses qui me semblent moins reluisantes. Les règles de scoping laissent beaucoup à désirer, Julia est très verbeux syntaxiquement et il lui manque une couche objet complète – sans parler d’un protocole méta-objet – et j’aurais aimé avoir un système de gestion des exceptions plus évolué. Je conclurai en disant que c’est un langage très intéressant pour le calcul scientifique à haute performance. »