[gull] Faut-il réhabiliter Perl comme langage de scripting système?
Daniel Cordey
dc at pxcluster.com
Sun Mar 4 20:32:23 CET 2018
On 04. 03. 18 15:50, Laurent Franceschetti wrote:
> Je souhaiterais avoir votre avis sur le rôle de Perl dans notre
> « skill set », parce que je me demande s’il mériterait peut-être qu’on
> l’enseigne à nouveau aux programmeurs.
> ...
> Pour moi ce ne sont pas des conclusions, mais des réflexions de
> travail (je vais faire l'expérience d’écrire mes petits scripts en
> Perl au lieu de bash). Je serais curieux d’avoir vos réactions —
> favorables ou contraires — à ce sujet?
Comme tu le dis, Perl est victime de l'arrivée d'un jeune mâle dans la
meute :-) Ce que tu dis au sujet des shells est très juste; il est
important de ne pas aller trop loin avec ! Perl a remplit le rôle
d'intermédiaire pendant des années et, jusqu'à il y a quelques années,
il était sans conteste la meilleure solution entre le shell et les
langages compilés. Aujourd'hui, il est bousculé par un langage qui
permet de faire "plus", mais requiert aussi un prix de départ un poil
plus élevé, mais c'est assez relatif tout compte fait.
De plus en plus d'outils d'administration sont réalisés en Python. Sans
doute parce qu'il s'interface aisément avec Gtk/Qt/etc., ou qu'il est
plus puissant en structure de donnée et en calcul ? Ou parce que la
nouvelle génération ne connaît pas ou n'apprend pas Perl ? Je ne sais pas...
Pour moi, à mon très humble avis, Perl souffre de quelques défauts dont :
- Très vite illisible, ou impossible à maintenir. Quand on reprend le
code de quelqu'un, la lecture de chaque ligne est un effort
non-négligeable qui fatigue très vite. A plus forte raison si le
programme est gros...
- Un syntaxe "bricolée" pour étendre les fonctionnalités du langage avec
les années. La proportion de caractère "spéciaux" est plus que suspecte
à mes yeux et est là uniquement pour aider l'interpréteur, au détriment
du programmeur.
- Perl est limité à l'usage de "strings". Ceci est valable pour toutes
les manipulations dans Perl. Les "hash" en Perl sont utiles comme
extension du langage, mais sont beaucoup plus limités que
l'implémentation en Python et l'on ne peut pas se créer un objet qui
puisse être utilisé comme clef. De plus, toutes les valeurs numériques
étant un "string", il est difficile de faire la différence entre float
et int, de même que vouloir agir sur la précision d'une variable lors
des calculs est assez pénible et surtout pas performant du tout. En
plus, cette manière de faire ralentit l'exécution du code.
- Perl est intimement lié aux regexp. C'est sans doute un atout dans
certains cas. Mais ça rend la lecture de codes Perl assez... pénible.
- Traitement des exceptions très perfectible, ce qui rend le debugging
particulièrement difficile et ne favorise pas l'écriture de code fiable.
- Passage de paramètres comme le shell ou C; à la différence que l'on a
pas de notion de signature et d'analyseur statique comme en C. C'est la
porte ouverte à de nombreux bugs souvent difficile à trouver.
Perl est un langage qui a été conçu comme une extension du shell pour
faciliter l'écriture de scripts pour l'administration système. Il permet
de faire mieux que le shell, mais souffre des mêmes défauts. Il est plus
performant car il n'a pas besoin de se reposer sur des commandes du
système, donc pas de fork/exec; et c'est sans doute son gros avantage
par rapport au shell. Mais dans la manipulation de structure de données
complexes, ses limitations deviennent àvidentes et ses performances sont
moins bonnes que Python (je ne parle même pas de calculs).
Perl permet sans doute d'écrire du code plus compact que Python pour
manipuler des fichiers, mais c'est au détriment de la lisibilité. Or,
dans le domaine de la maintenance. la notion de lisibilité devient
capitale, et c'est sans doute cet aspect qui rebute les nouveaux venus
dans l'IT. Aussi, dés que l'on quitte le mode du "traitement" de
fichier, on quitte la zone de confort de Perl et ses limitations
commencent à peser très vite. On retombe dans le même problème que la
"sur-utilisation" du shell dont tu parlais dans ton mail.
Voilà, c'est très perso... Je ne suis pas objectif car j'ai détesté Perl
dés le début et j'ai toujours réussi à en faire un minimum, me
contentant de jongler entre le shell et des programmes C que j'écrivais
lorsque les choses devenaient trop compliquées en shell (ou avaient
besoin de performance). L'arrivée de Python m'a comblé en tant que
programmeur et je vois bien que ce langage recouvre un peu les domaines
où Perl fut pendant longtemps le seul pour résoudre un type de problème.
Les avantages de Perl s'en sont trouvés remis en cause et ses
limitations sans doute plus visibles.
Recommencer l'enseignement de Perl ? Pourquoi pas... mais à qui ? Sans
doute pas à la nouvelle génération, baignée de concept antinomiques :-)
dc
More information about the gull
mailing list