Informatique‎ > ‎

Où est passé Perl ?

Il y a une dizaine d'années, la popularité de Perl est considérable : le langage donne le la de la programmation Web, façonne la culture Open Source et anime le coeur des sites de référence de la nouvelle vague des développeurs, comme Slashdot. Aujourd'hui, le langage semble avoir disparu de l'actualité et a manifestement du mal à attirer les nouveaux développeurs, lesquels lui préfèrent PHP, Python ou Ruby.


Le succès et l'explosion

Le langage Perl1 a des débuts bien humbles : en 1987 Larry Wall, alors administrateur système sur UNIX, conçoit ce langage afin de se faciliter la vie. Le quotidien d'un sysadmin UNIX consiste à cette époque en un cocktail mélangeant sed, awk et un zeste de script shell. Il s'agit alors de proposer quelque chose à la fois de plus puissant et de moins contraignant.

Un langage souple

L'approche de Larry Wall dans la conception de Perl se montre assez originale. On est loin d'un langage normalisé, défini par un comité et spécifié par un corpus de standards2 : Perl se développe de manière organique, au fur-et-à-mesure qu'il est confronté à de nouveaux problèmes, il embrasse de nouveaux concepts pour y faire face. Au fil de toutes ces évolutions, Perl ne perd cependant pas de vue son principe fondateur qui consiste à laisser toute sa liberté au programmeur. A la différence de langages stricts comme Ada ou plus tard Python, Perl ne considère jamais une approche donnée comme étant meilleure dans l'absolu et ne cherche donc jamais à travers des restrictions syntaxiques à aiguiller le programmeur sur une voie précise.

Perl, en pratique, propose tout une variété de syntaxes, allant du C-like pour l'habitué des langages procéduraux et structurés, à des syntaxes plus proches de l'anglais. A cet effet, Perl attribue à ses mots-clefs et fonctions essentielles des noms aussi évocateurs que possible, et certains ne manquent pas d'humour. Ainsi, en cas d'erreur, un programme peut se mettre à ronchonner (carp), coasser (croak) voire peut tout simplement mourir (die). Le classique des classiques if est complété de sa contrepartie unless, plus élégante qu'un if not dans bien des contextes. Un chaîne de caractères peut être coupée (chop) ou se faire mâchouiller le bout (chomp), pour se soustraire un caractère malvenu (de retour à la ligne, par exemple). Certaines instructions portent parfois des noms plus inattendus. Ainsi, un objet doit recevoir la bénédiction de Perl pour devenir une instance de classe (bless).

Rapidement, le language montre une grande capacité d'adaptation et investit un à un tous les domaines de la programmation, depuis la manipulation de texte, sa première spécialité, jusqu'à la réalisation de serveurs complets et performants.

La culture de Perl

Au-delà de la syntaxe de Perl, son élément le plus distinctif est sans doute sa culture ou plutôt sa contre-culture. Là où Java, pour assurer son essor en entreprise, met en avant sa solidité, son sérieux, Perl affiche son humour et son auto-dérision. Perl et sa communauté qui se crée affirment que l'on peut produire du code efficace sans nécessairement se prendre très au sérieux. Ainsi, alors que l'on commence dans certains cercles à disserter de la manière de formaliser les Design Patterns, Larry Wall préfère expliquer pourquoi "les trois grandes qualités d'un programmeur sont la paresse, l'impatience et l'arrogance"3.

Non contente de chahuter les a priori, la communauté Perl pousse aussi son langage en dehors de limites habituelles de la programmation et profite de la syntaxe unique de Perl pour écrire des poèmes, tels que le fameux "Black Perl" de Larry Wall4 :

BEFOREHAND: close door, each window & exit; wait until time.
    open spellbook, study, select it, confess, tell, deny;
write it, print the hex while each watches,
    reverse "its length", write again;
    kill spiders, pop them, chop, split, kill them.
        unlink arms, shift, wait & listen (listening, wait),
sort the flock (then, warn "the goats". kill "the sheep");
    kill them, dump qualms, shift moralities,
    values aside, each one;
        die sheep, die, reverse system
        you accept (reject, respect);
next step,
    kill next sacrifice, each sacrifice,
    wait, redo ritual until "all the spirits are pleased";
    do it ("as they say").
do it(*everyone***must***participate***in***forbidden**s*e*x*).
    return last victim; package body;
    exit crypt (time, times & "half a time") & close it,
    select (quickly) & warn next victim;
AFTERWORDS: tell nobody.
    wait, wait until time;
    wait until next year, next decade;
    sleep, sleep, die yourself and
    rest at last

On voit aussi fleurir dans les signatures de emails des développeurs Perl de courts programmes, volontairement difficiles à suivre et dont le seul but consiste à écrire à l'écran "Just Another Perl Hacker"5. Ce genre de prouesses se retrouve dans le sport favori des perliens, à savoir le code golf, où il s'agit d'écrire un programme aussi court que possible pour réaliser une tâche donnée. Le golf et les jeux de signatures donnent vite naissance à une mailing list dédiée, Fun With Perl. Ces deux amusements présentent également le point commun d'utiliser des subtilités de Perl et, par conséquent, de pousser les participants à maîtriser leur langage jusque dans les derniers recoins. Cette contre-culture s'érige même en république, The Programming Republic of Perl, dont l'éditeur O'Reilly fournit le logo.

On comprend que Perl n'est pas simplement un langage pour produire du code, pour éditer des softs à la chaîne ; Perl est avant tout l'affaire d'une passion. Peu de langages peuvent se vanter d'avoir une revue périodique dédiée et pourtant, dès 1995, Perl a son Perl Journal, où l'on peut découvrir l'actualité des modules et des évolutions du langage6.

Enfin, la communauté Perl n'a de cesse de montrer son auto-dérision, en publiant différents modules purement humoristiques mais absolument fonctionnels, leur dédiant même un espace de nommage, Acme. Ainsi, on peut programmer en latin, en morse voire en rien. On y trouve également de quoi donner des noms originaux à ses variables (avec des thèmes comme "Batman""Barbapapa""booze" ou "Buffy"). On s'y moque(gentiment) de Python ou on y simule la syntaxe. Enfin, un autre module Acme permet d'écrire son code dans le style inimitable des spams prétendument rédigés par le fameux "prince du Niger en exil". Là encore, il s'agit de ne pas se prendre au sérieux, mais chacun de ces modules consiste en un certain tour de force vis-à-vis du langage et constitue une sorte de petit prodige à lui tout seul. Bref, on apprend vraiment en s'amusant.

Perl, le langage de la bulle

Revenons maintenant au cheminement de Perl. Au milieu des années 90, Perl combine trois ingrédients explosifs. Il offre tout d'abord un moyen simple pour créer des CGI, ces programmes magiques permettant de participer à la nouvelle révolution technologique. Ensuite, sa syntaxe tolérante et sa contre-culture affichée attirent en masse les développeurs expérimentés ou non et qui se lancent dans l'aventure du Web naissant. Enfin, son mode de développement Open Source le place aux côtés de Linux dans les yeux du public qui y voit une sorte de petit miracle, c'est-à-dire un logiciel à la fois gratuit et puissant qui semble renverser tous les a priori. Larry Wall est alors de toutes les conférences pour expliquer le succès de Perl, de l'Open Source et pour disserter sur l'avenir de la programmation en général. Perl devient alors indissociable de la toute jeune culture du développement Web, ce monde révolutionnaire où la moindre page HTML peut rendre riche son créateur.

On connaît bien la suite : finalement, la ruée vers l'or numérique tourne court et beaucoup en sont pour leurs frais. Les technologies vedettes d'hier font maintenant fuir les investisseurs et on ne croit plus aux miracles de Linux et de Perl. Pour ses qualités mais aussi faute d'alternative visible, le premier parvient à traverser cette crise de confiance sans chavirer. Perl, de son côté, subit une concurrence forte à la fois de Python pour les applications traditionnelles mais surtout de PHP dans le domaine du Web, et c'est PHP que l'on associe désormais au trio gagnant Linux, Apache et MySQL. Rapidement, on ne mentionne plus Perl dans les annonces d'emploi, Larry Wall disparaît des programmes des conférences Open Source et on commence à reprocher à Perl son bilan. L'ancien roi du Web ayant ouvert les portes de la programmation à tout le monde dans un contexte d'euphorie parfois excessive, on trouve effectivement de tout dans ce bilan, dont une proportion de code épouvantable forcément très importante. Perl démarre les années 2000 sans pouvoir se débarrasser de cette image de langage en bout de course, un projet dont la réalité a réfuté les prétentions.

L'annonce du lancement du chantier de Perl 6, destiné à reprendre Perl 5 depuis zéro et à révolutionner, encore une fois, le monde de la programmation, ne parvient pas à remettre Perl au centre des attentions. Pire, il crée une attente et, son développement s'enlisant, génère des déceptions et une certaine confusion. Python profite de ce coup de mou pour mettre les bouchées doubles et se populariser, notamment par le biais de son imposante librairie standard et Ruby, grâce au fameux Rails, parvient à s'établir comme la plateforme de choix pour le développement Web plus simple et moins lourd que Java et plus moderne que PHP.

Perl aujourd'hui

On dirait bien aujourd'hui que tout ceci a eu raison de Perl, que le langage a disparu pour de bon. Il suffit pour s'en convaincre de regarder son classement en termes de popularité sur GitHub, où à la huitième place, il ne représente que 6 % du code total hébergé par le site, loin derrière Ruby (16 %), derrière Python (9 %) et même derrière PHP (7 %). Perl reste également assez inaudible et invisible sur le Web d'aujourd'hui, où bien peu de blogs en font leur sujet principal et où ne twitte que très peu à son sujet7. De même, côté logiciels, Perl semble rarement derrière les logiciels à la mode : on compte très peu de moteurs de blogs en Perl (même Movable Type, la principale référence Perl dans le domaine, a évolué vers PHP pour une bonne partie), aucune application à la mode non plus... Un autre indicateur, le nombre de livres publiés sur le langage, montre également que de moins en moins de développeurs font le choix d'apprendre Perl et de travailler avec, là où de nombreux ouvrages sont publiés chaque année pour Ruby ou Python (et, aujourd'hui, JavaScript, de retour en grâce).

Ensuite, la semi-existence de Perl 6 ne fait que rendre les choses encore plus compliquées. Le nom de ce langage semble en faire le successeur naturel de Perl 5 et par conséquent, on peut légitimement penser que tout investissement personnel dans ce dernier relativement peu intéressant. En effet, pourquoi se lancer dans Perl 5, assez ancien, quand Perl 6, tout frais, risque à tout moment d'entrer en scène ? Vu d'une autre manière, on peut aussi se dire que si Perl 6 est une version corrigée et remise au goût du jour de Perl 5, le fait qu'au bout de dix ans de développement, rien ne soit encore sorti d'utilisable ne fait que confirmer le sentiment que Perl appartient au passé, incapable de s'adapter à la nouvelle donne. Peut-être que si Perl 6 s'était appelé différemment, l'argument que Perl 5 et Perl 6 sont deux langages différents pourrait convaincre, mais ça reste bien hypothétique. En résumé, Perl 6 serait à Perl 5 ce que Arc a été à Lisp : un découragement pour les nouveaux développeurs et un argument difficile à gérer pour les développeurs existants.

Malgré les apparences, on s'en doute, Perl reste un langage très utilisé (en novembre 2011, il se classe à la dixième place de l'index TIOBE, devant Ruby, par exemple). Cette absence de Perl au premier plan provient plutôt des habitudes de sa communauté : s'il n'y a que très peu de blogs autour de Perl, c'est tout simplement que les développeurs Perl n'en tiennent pas. Il en va de même pour twitter et les autres canaux de communication aujourd'hui à la mode. L'activité autour de Perl se déroule toujours dans les artères du réseau qui étaient reines durant les années 90 : Usenet, IRC et les mailing lists. En revanche, cela montre la difficulté de renouvellement de population rencontrée par les développeurs Perl et cette absence de visibilité ne fait qu'empirer les choses.

Cette absence du Web n'est cependant pas totale mais il faut bien avouer que le résultat n'est pas toujours très heureux. Quelques bloggueurs Perl (il y en a quand même quelques-uns) se sont récemment posé la question de savoir ce qu'un développeur motivé pour apprendre Perl trouvait en réponse à sa requête "perl tutorial" dans Google. Les tout premiers résultats (ceux de la première page, à laquelle on s'arrête bien souvent) mènent à des pages écrites entre 1999 et 2002 et sont, accessoirement, parfois d'une qualité douteuse en plus d'être complètement périmées. Lorsqu'un nouveau venu se lance et ne trouve que des références datant d'un autre âge, on peut estimer qu'il ne va pas rester longtemps dans les parages et que l'herbe va lui sembler plus verte du côté de Python ou de Ruby. Dans le même ordre d'idée, le site communautaire Perl, Perl Monks, s'il était probablement très sexy en 2000, fait aujourd'hui figure de vieillerie au design très amateur. Il suffit de le comparer à StackOverflow pour s'en convaincre... Tout n'est pas noir dans ce domaine, car d'une part, les grands noms de Perl participent activement à StackOverflow, justement, et d'autre part tentent de réagir pour corriger les mauvais résultats fournis par Google.

En revanche, cette relative absence du Web et la mauvaise réputation du langage s'entretiennent mutuellement et jouent contre Perl. Ainsi, le Web bruisse régulièrement des derniers projets des startups nouvelle génération, comme 37 signals, Twitter, Flickr ou Reddit. Leurs choix technologiques sont disséqués par les observateurs et, bien souvent, considérés comme constitutifs du succès de ces entreprises. Le fait est qu'aujourd'hui, Perl est systématiquement absent de ce panorama, notamment parce que Perl est vu comme inadapté, et cette absence en retour alimente cette même idée. Certains langages profitent au contraire d'un cercle vertueux, en ce qu'ils profitent d'une grande publicité en étant utilisés par telle ou telle jeune entreprise prometteuse, laquelle sera copiée par d'autres encore. C'est en quelque sorte le schéma qui a fonctionné pour Perl durant les années 90 mais qui s'est brisé au début des années 2000.

Perl 5 a pourtant su entendre bien des critiques et s'adapter : via un ensemble de modules,Moose, il dispose aujourd'hui d'un système objet extrêmement puissant et élégant, implémentant le Meta Object Protocol, à la base du CLOS de Lisp. Ce système reposant sur des modules, il reste totalement extensible et adaptable, conformément à la tradition de Perl (et de Lisp). Des frameworks Web de nouvelle génération sont apparus, dontDancer, lequel permet un développement très rapide tout en restant propre et qui s'inspire largement de Sinatra, un framework issu du monde Ruby. Catalyst, de l'autre côté du spectre, est un framework particulièrement complet pour réaliser des sites Web complexes et comparable à Django, probablement l'un des meilleurs logiciels écrits en Python.

Par ailleurs, Perl, en opposition totale avec sa réputation de langage difficile à maintenir, propose également de nombreux outils consacrés à l'amélioration de la qualité du code, depuis les jeux de tests avancés jusqu'à la critique du code, suivant des règles décrite dans un ouvrage de référence, Perl Best Practices, et dont les pages sont citées en cas d'erreur, ou suivant des règles que l'on peut définir soi-même.

De manière intéressante, il est à noter qu'une bonne partie des récentes évolutions de Perl 5 ont leurs racines dans le développement de Perl 6. Les bonnes idées y sont puisées et mises en marche dans Perl 5, un peu comme Python 2.x a su profiter des avancées de Python 3000 à travers des librairies de transition. En ce sens, le développement de Perl 6 a en réalité relancé celui de Perl 5, lequel au début des années 2000 a commencé à s'enliser et à se scléroser, de nombreux développeurs du langage ayant peur de casser la compatibilité avec du code ancien. Perl 6, en annonçant une rupture avec Perl 5 mais promettant de fournir le moyen de faire tourner du code Perl 5 a permis de donner libre cours à des évolutions au sein de Perl 5 et a agi comme un laboratoire d'expérimentation pour celui-ci. Si aujourd'hui il n'est pas forcément facile d'expliquer la coexistence de Perl 5 et de Perl 6 et qu'elle crée une certaine confusion aux yeux des nouveaux venus, il n'en reste pas moins que les acteurs principaux de la modernisation de Perl 5 doivent beaucoup à cet effort de développement.

Si Perl a su s'adapter et se moderniser, beaucoup d'autres langages ont également repris ses idées. Ainsi, le traitement des expressions rationnelles, connu sous le nom de PCRE pour Perl-Compatible Regular Expressions, est aujourd'hui la référence. La grande archive centralisant les modules écrits pour Perl, le Comprehensive Perl Archive Network, ainsi que la possibilité d'en installer les éléments, avec gestion automatique des dépendances, a maintes fois été reprises : on trouve un CRAN pour R, un CTAN pour TeX, le Cheese Shop de Python, le système des Gems de Ruby, Hackage et Cabal pour Haskell, ASDF puis Quicklisp pour Lisp... Bref, il s'agit véritablement d'une fonctionnalité attendue et nécessaire à un langage pour qu'il puisse convaincre.

Perl aujourd'hui est donc toujours là, bien vivant même s'il se trouve dans une drôle de situation et s'il a du mal à attirer les nouveaux développeurs. Il suffit finalement de le chercher un peu pour le trouver et pour en savourer la culture unique.

kafka - Novembre 2011

Réagir par mail


  1. Les orthographes Perl, perl et PERL désignent des choses différentes. Perl est le nom langage, perl celui de l'interpréteur et PERL est une ancienne forme, datant des premiers jours du langage qui n'a plus lieu d'être aujourd'hui.  

  2. A la différence, par exemple, de Java et de son Java Community Process Program et de ses Java Specification Requests, ou de Python avec ses Python Enhancement Proposals. Perl n'est pas non plus normalisé ISO, AINSI ou ECMA, à la différence de l'ECMAScript ou de la CLR .NET. 

  3. Le texte complet de la présentation d'où est extraite cette citation et qui figure dans le livre Open Voices d'O'Reilly, est disponible ici

  4. Il s'agit ici de la version mise à jour pour Perl 5 par Ovid. La version originale de Black Perl, écrite par Larry Wall le 1er Avril 1990, ne tourne que sur Perl 3. Il est à noter que si le programme ne fait rien, il passe l'étape de compilation sans problème. 

  5. La page Wikipedia en montre des exemples variés. 

  6. La totalité des archives du Perl Journal sont disponible en version électronique et une compilation sous forme de livres est disponible chez O'Reilly. 

  7. A noter à ce sujet l'initiative d'un développeur Perl de premier plan, Matt S. Trout, de motiver la création de blogs Perl par le biais d'un concours permanent. Son billet donne également un certain nombre de détails quant aux raisons de l'invisibilité de Perl sur le Web.