Jusqu’ici, le langage que nous avons utilisé a toujours été Perl. Mais nous ne pouvions pas, surtout vu l’intitulé de notre blog, ignorer trop longtemps un des langages “rivaux” de celui-ci: Python. Notons que le rapprochement entre le nom de ce langage et une célèbre troupe de comédiens britanniques ne vient pas que de mon appétence visiblement pas assez modérée pour les jeux de mots ; c’est bien en honneur des Monty Python, dont il était un grand admirateur, que Guido van Rossum a nommé en 1989 son nouveau langage de programmation de la sorte.
Le premier billet à propos de Python reprendra un sujet déjà largement débattu : Perl ou Python ?
Les points communs
Avant d’examiner les raisons qui feraient choisir un ou autre langage, commençons d’abord par comprendre pourquoi on peut hésiter entre ces deux langages.
Perl et Python ont tous les deux des usages variés
Même s’ils ont chacun des domaines de prédilection, Python et Perl sont tous deux des langages génériques, utilisables dans des contextes fort nombreux, en particulier grâce à l’utilisation de bibliothèques spécialisées.
Perl et Python sont tous les deux multi-plateformes
Vous êtes un geek assumé travaillant chez vous sur une distribution obscure de Linux, mais à votre université, on s’acharne à vouloir accroître les profits de Microsoft ? Vous avez toujours votre brave vieux PC sous Windows XP, mais votre laboratoire s’est équipé en iMac 27 pouces Quad-Core flambant neufs (je m’adresse là à d’éventuels visiteurs qui ne seraient pas dans la recherche publique française, bien entendu) ? N’ayez crainte! Aussi bien Perl que Python peuvent être utilisés quel que soit le système d’exploitation. C’est un magnifique avantage pour les situations plus ou moins crédibles que nous venons d’évoquer, et pour beaucoup d’autres d’ailleurs. Mais ce n’est donc pas un facteur de choix entre ces deux langages.
Perl 6 et Python 3 ne sont pas rétro-compatibles
Quand vous apprenez l’un ou l’autre de ces langages, vous apprenez un langage qui n’est pas compatible (ou du moins, pas fait pour être compatible) avec ses versions antérieures. Ce point peut-être gênant si vous cherchez à intégrer votre travail à un projet réalisé avec une version antérieure de ces langages. Des solutions ont été proposées de chaque côté. Du côté de Perl, un mode de compatibilité a cependant mis en place pour aider la portabilité entre Perl 5 et Perl 6. Du côté de Python, par contre, on a choisi de continuer à améliorer Python 2 au fur et à mesure des actualisations faites pour Python 3 – le but étant que les utilisateurs de Python ne soient pas obligés d’apprendre la nouvelle version pour bénéficier de ses améliorations. Mais si vous êtes un nouvel utilisateur de Python et que vous voulez produire un travail compatible avec Python 2, il vous faudra apprendre et Python 2 et Python 3.
Perl et Python utilisent un typage dynamique
La chose peut paraître anecdotique – mais elle me permet de revenir sur un des points du “hello world!”. Comme Jean-Baptiste le faisait remarquer, C++ demande à l’utilisateur de déclarer le type de la variable qu’il crée: s’agit-il d’un nombre entier, d’un nombre réel (“à virgule flottante”, si on aime cet anglicisme), d’une chaîne de caractères etc. ? On parle pour les langages agissant de la sorte de “typage statique”. A l’opposé, pas plus Perl que Python ne vous demanderont cette information. Ils utilisent un “typage dynamique”. Jean-Baptiste ayant déjà illustré ce point sous Perl, je me charge uniquement d’expliciter ce phénomène sous Python. Plutôt que de demander la nature d’une variable (son “type”), Python va regarder ses attributs pour déduire de lui-même le type. On parle de “duck typing”: si je vois un oiseau qui nage dans une mare, doté d’un joli col vert et de palmes jaunes, qui se manifeste par des “coin-coin” aussi élégants que sonores, j’appelle cet oiseau “canard”1. Python fait de même: si je lui crée trois variables de types différents, il observe leurs caractéristiques et infère leur type.
Ainsi, Python reconnaît-il sans aide que la constante de Planck est un nombre réel (float), que 42 est un entier (int – pour “integer”) et que “coin coin” est une chaîne de caractères (str, pour “string”).
Les différences
Python: un langage plus rapide ?
Pour la plupart des tâches testées, l’exécution d’un code Python se fait plus rapidement que celle d’un code Perl2. Avouons-le, ce dernier point n’est pas crucial dans la plupart des applications en littérature et en sciences humaines – mais selon vos utilisations, il peut tout de même avoir de l’importance.
Python: un langage plus simple ?
De l’avis de beaucoup, et en particulier depuis la version 3 de Python, ce langage est globalement plus simple à apprendre. Un de ses avantages est ainsi d’avoir été conçu pour que chaque tâche ne puisse être exécutée que si l’on écrit un ensemble précis et unique de lignes de codes. En résulte un code lisible et facile à maîtriser. A l’opposé, en Perl, il peut exister beaucoup de solutions différentes pour réaliser la même opération, ce qui rend difficile, même pour un utilisateur avancé, de lire le code d’un autre programmeur. C’est ce point qui a probablement le plus aidé à la diffusion de Python, plus répandu que Perl aujourd’hui.
Perl vs. Python: littéraire contre scientifique ?
A ce stade, avouons-le, on ne voit pas bien pourquoi certains pourraient préférer Perl à Python. Pourtant, Perl a lui aussi des avantages clefs, en particulier pour les domaines qui nous intéressent. Perl a ainsi été conçu pour extraire au mieux des informations d’un texte, et de générer des rapports à partir de ses analyses. C’est donc naturellement que Perl est devenu le langage de prédilection des linguistes – et qu’il peut être celui des philologues, voire des historiens, sociologues ou juristes voulant analyser des corpus textuels importants. Python est quant à lui plus à l’aise avec les tâches plus calculatoires, ou mathématiques en général, en particulier avec l’aides de modules comme NumPy, SciPy, ou Matplotlib. Il est grâce à cela populaire dans des domaines comme la bio-informatique, la finance, et généralement pour l’analyse de données scientifiques. Bien sûr, Python ou Perl peuvent être utilisés sur les terrains de prédilection de l’autre avec une certaine efficacité – mais nous y reviendrons dans de prochains billets.
Au final, le choix entre Python et Perl est délicat, et dépend de vos centres d’intérêts précis. En dehors de l’analyse textuelle, il paraît clair qu’un expert en humanités devrait préférer débuter Python, qui reste plus facile d’accès que Perl. Pour l’analyse textuelle, Perl est probablement le bon choix – mais nous mettrons régulièrement ce choix à l’épreuve, en comparant l’efficacité de Perl et Python sur différentes tâches d’analyse de corpus au cours des prochains billets.
- C’est bien là l’origine de ce terme, rarement traduit en français – “duck typing” préservant une impression de sérieux, contrairement à “typage canard”. On trouve trace de cette expression et de ce raisonnement pour la première fois en 2000 dans la bouche d’Alex Martelli sur ce newsgroup. [↩]
- Les sources de ces tests sont trop nombreuses à citer. Juste en clin d’oeil à notre premier billet, on pourra par exemple consulter cette évaluation sur le blog d’Ivan Zahariev [↩]
OpenEdition vous propose de citer ce billet de la manière suivante :
Florian CAFIERO (19 décembre 2010). Python’s Flying Circus épisode 1: Python vs. Perl. Sacré Gr@@l. Consulté le 7 décembre 2024 à l’adresse https://doi.org/10.58079/p41t
Une seule façon de faire les choses ? Mais ça doit être terriblement ennuyeux 😉
Plus sérieusement, je voudrais revenir sur la question de Perl 5, Perl 6, et la rétrocompatibilité. Tout d’abord, je tiens à souligner que, jusqu’à présent, tout a été fait pour que les nouvelles versions de Perl soient rétrocompatibles, ce qui a dans l’ensemble été un succès. Le cas de Perl 6 est un petit peu à part.
Sans revenir trop en détail sur la longue histoire de Perl 6, l’Arlésienne qui n’est d’ailleurs pas tout à fait encore apprêtée, on notera tout de même que Perl 6 est un peu plus qu’une nouvelle version de Perl. En réalité, il s’agit plutôt d’une refonte complète du langage, sur laquelle se penchent certains des plus beaux cerveaux de l’informatique, dont Audrey Tang ou le français Patrick Michaud. À l’origine de Perl 6, il y a les “Apocalypses” (au sens de révélations) de Larry Wall : identifiant tout ce qui lui semblait ne pas aller dans les langages de programmation en général, et dans Perl en particulier, celui-ci a voulu jeter les bases d’un langage de programmation approchant de la perfection. Désavantage de cette position : la nouvelle version met un temps inouï à sortir, et pendant ce temps Perl prend du retard sur ses concurrents et, alors même qu’il était un des langages les plus utilisés, notamment en programmation web, se retrouve un peu à la traîne par rapport à ses concurrents, notamment Python, qui ont, eux, profité de ce temps pour intégrer les aspects les plus innovants de Perl, notamment sa syntaxe d’expressions régulières (rappelons que Perl était le premier langage à intégrer un système avancé d’expressions régulières, ce qui le rend particulièrement adapté aux traitements textuels; depuis, des langages comme Python ou PHP ont intégré ce système d’expressions régulières, les Perl Compatible Regular Expressions). En revanche, l’avantage, car il y en a un, de ce projet, est que la nouvelle version de Perl est extrêmement prometteuse, notamment pour ce qui est de la nouvelle version de la syntaxe d’expressions régulières complètement refondue (avec notamment la possibilité de créer des règles et des grammaires, de composer un analyseur syntaxique, cf. article Wikipedia), de l’intégration d’un certain nombre d’éléments de la programmation objet, ou encore la possibilité d’utiliser en parallèle typage dynamique et statique (si l’on cherche par exemple à augmenter la vitesse d’exécution d’un programme). Certains de ces avantages seront d’ailleurs, comme tu le disais, intégrés aux nouveaux développements de Perl 5, tandis qu’il sera possible d’écrire un programme partiellement en Perl 5 et en Perl 6, avec un mode de compatibilité prévu et l’intégration possible des modules existants de Perl 5 à Perl 6.