Dans le cadre des exposés réalisés par les étudiants en cours de Système, j'ai choisi de présenter les différences et les similitudes entre deux langages de scripts : Perl et Python. Téléchargez la version Powerpoint de cette présentation.
Les objectifs de cette présentation sont :L'accent sera mis sur Python, car c'est un langage moins connu, qui promet malgré tout de de belles perspectives.
- d'aborder les principes généraux des deux langages : quelles sont leurs origines ? à quoi servent-ils ?
- de comparer les avantages et les inconvénients de chacun : quelles sont leurs similitudes ? quelles sont leurs différences ?
- d'avoir un aperçu visuel de leur syntaxe et de leur utilisation à travers deux exemples de code simples
- d'essayer de répondre à la difficile question : lequel choisir ?
Ecrivez à Cédric Bertho - IR 5 pour toutes questions ou commentaires.
- Origines de Perl et PythonPerl comme Python sont des langages de scripts évolués, c'est à dire des langages interprétés. Dans les deux cas, les scripts sont traduits par un "programme" (interpréteur spécifique à Perl ou à Python) chaque fois qu'ils sont exécutés (ce qui n'est pas le cas des programmes compilés comme en langage C). L'avantage à celà, c'est que l'on peut expérimenter et débugger plus facilement nos "programmes-scripts" car on ne passe pas par une phase intermédiaire de compilation.
Python a été développé en 1990 par Guido van Rossum (université d'Amsterdam). A l'origine, il était destiné au projet Amoeba (projet de conception de système d'exploitation). Il ne doit pas son nom au serpent mais à la série des Monthy Python?s Flying Circus à partir de laquelle de nombreux codes d'exemples se sont inspirés.Perl quant à lui a été développé en 1987 par Larry Wall (université de Seattle Pacific ?). Il était destiné initialement aux traitements de chaînes de caractères sous Unix (avec l'utilisation des expressions régulières). Son acronyme signifie "Practical Extraction and Report Language" ou "langage de rapport et d'extraction pratique".
- A quoi servent-ils ?Tous deux permettent :
- le développement rapide de diverses tâches courantes telles que : des scripts d?administration système, d'analyse de fichiers textuels, etc.
- le prototypage rapide d?applications, c'est à dire la réalisation d'un "brouillon" dans la conception d'une application. Cela permet de réaliser rapidement le "modèle réduit" d'un projet, partiellement réalisé et fonctionnel, peu robuste et lent, destiné à montrer ce qu'on va faire aux clients et à expliquer aux développeurs les problèmes que l'on rencontre.
- la réalisation d'interfaces avec des programmes écrits dans d'autres langages (C, Java, ?)
- l'interrogation de bases de données : Oracle, MySQL, PostgreSQL, ...
- de faire de la programmation Internet, avec notamment des CGI (Common Gateway Interface)
- le traitement d?images, la création d'interfaces graphiques (grâce à des modules et des bibliothèques appropriés)
- Quelles sont leurs similitudes ?Perl et Python sont tous les deux gratuits, portables et Open Source.
Ce sont des langages multi-plateformes qui tournent sur les environnements Unix, Windows, BeOs, MacOS, Amiga, ...
Ils peuvent être utilisés de manière procédurale ou orientée objet.
Tous deux supportent des structures de données riches et dynamiques (listes, hashtables, ...).
Ils possèdent de fortes communautés de développeurs (CPAN (Comprehensive Perl Archive Network) pour Perl et PSA pour Python).
Ils disposent de nombreux modules et bibliothèques d?outils.
Ils sont lents à l'exécution (surtout pour du parsing sur des gros fichiers -voir dans la partie suivante-).
- Quelles sont leurs différences ?On dit que "Perl est plus gros, mais Python grossit plus vite". Celà signifie qu'en terme de documentation et de support communautaire, de modules d'extension, Perl est bien plus important par rapport à Python. Perl est réputé pour avoir la plus grande infrastructure communautaire de tous les langages de scripts, notamment grâce au CPAN qui est un ensemble d'archives de documentation et de codes réutilisables.
Malgré tout, l'engouement pour Python grandit beaucoup plus vite qu'il ne l'a été pour Perl. Le nombre de personnes présentes aux conférences sur Python augmente plus rapidement que celui des conférences sur Perl.L'orientation objet est native pour Python, alors qu'elle est superficielle pour Perl. Python s'assemble donc plus facilement avec des composants orientés objets. D'ailleurs, les modules les plus récents ou les plus intéressants sont d'abord portés ou mieux portés sur Python.
Les performances de parsing sur des fichiers XML entre Perl, Python (et d'autres langages) mesurées sur le site : http://www.xml.com/pub/Benchmark/exec.html montrent que Perl est légèrement plus performant que Python. Tous deux restent malgré tout très lents par rapport à un programme écrit en langage C.
Ce sur quoi la polémique est la plus forte entre les deux langages, c'est leur syntaxe respective.
Le slogan des "adorateurs" de Perl est : "There?s more than one way to do it", ce qui signifie "Il y a plus d'une façon de le faire". Ce slogan est souvent repris aussi bien par les fans de Perl que par ses opposants pour fonder leurs argumentations. En Perl, il y a plusieurs manières d'arriver au même résultat pour un programme : référencer un élément dans une liste, écrire l'ensemble des paires clé/valeur définisant une hastable peuvent s'écrire de différentes façons ! Celà peut être un avantage dans la mesure où l'on gagne en liberté d'implémentation. Seulement, cette liberté s'accompagne d'une réputation de syntaxe illisible pour les néophytes. La syntaxe de Perl est complexe, elle n'est pas à la porté du premier débutant en programmation venu. De plus, la présence de nombreux symboles tels que @, _, %, sur une ligne de script peut produire une certaine fatigue ou "bruit" à la lecture du code source. Les fans disent que c'est une économie d'expression, les opposants de Perl l'accusent d'avoir un côté "astuces".Le grand point fort de Python sur Perl c'est sa lisibilité. Le slogan des fans de Python est : "Life?s better without braces", ce qui signifie "La vie est meilleur sans accolades". En Python il n'existe pas d'accolades pour délimiter un bloc de code. En fait, le programmeur Python n'a pas le choix dans la façon de formater son code s'il veut pouvoir l'exécuter sans erreurs. Comme pour un Makefile, une mauvaise indentation produit une erreur de syntaxe (voir les exemples de code dans la partie suivante). La syntaxe de Python est plus donc constante et uniforme, voir restrictive. Sa rigidité lui permet d'être plus compréhensible par tous, notamment pour des projets avec plusieurs auteurs et des centaines de lignes de codes sources. Les scripts Python ont tous la même "tête", ils peuvent donc être relus par d'autres plus facilement. Cette remarque n'est pas négligable surtout lorsque l'on sait qu'un développeur passe au moins autant de temps à lire et comprendre un code qu'à l'écrire !
- Exemples d'utilisation :L'objectif de cette partie n'est pas de détailler la syntaxe de code de chacun des exemples, mais d'avoir plutôt un bref aperçu visuel des différences de syntaxe entre Perl et Python.
- Premier exemple :
Le but est de lister toutes les commandes que l'on peut lancer (toutes celles présentes dans la variable PATH) :Perl :#!/usr/local/bin/perl for (split(/:/, $ENV{'PATH'})) { opendir(DIR, $_) or die "can't opendir $_: $!"; grep {!/^\./ && print "$_\n" } readdir(DIR); closedir DIR; }Python :Voici le résultat obtenu avec Python, sous Windows (cliquer sur l'image pour l'agrandir) :#!/usr/local/bin/python import os, string, stat for d in string.split(os.environ['PATH'], ':'): for f in os.listdir(d): mode = os.lstat(d + '/' + f)[stat.ST_MODE] if not stat.S_ISDIR(mode): print f- Deuxième exemple :
Lister un fichier comme une liste de lignes :Perl :#!/usr/local/bin/perl $filename = "cooktest1.1-1"; open (F, $filename) or die ("can't open $filename: $!\n"); @lines =; Python :#!/usr/local/bin/python import sys filename = "cooktest1.1-1" try: f = open (filename) except: sys.stderr.write ("can't open %s: %s %s\n" % (filename, sys.exc_type, sys.exc_value)) lines = f.readlines()- Lequel choisir ?Il est difficile de donner une réponse tranchée à cette question.
Perl s'adresse d'avantage à des gens ayant déja programmé, des programmeurs familiers au C, à Sed, Awk ou aux commandes Unix. Il nécessite la compréhension des expressions rationnelles, et d'avoir la faculté de comprendre le code des autres. On l'utilise plus volontier pour le traitement de chaînes de caractères ainsi que pour les CGI.Python semble plus approprié aux débutants en programmation. Il intéressera d'avantage ceux qu'ils veulent faire de la programmation orientée objet. Les réactions contre Perl n'apparaissent pas avec Python : ceci atteste la qualité du design et l'implémentation en Python. De part ses conventions, son esthétisme et son support inhérent pour des ensembles d'objets, Python est plus adapté aux projets de grande taille.
Pour conclure, si vous ne savez toujours pas lequel choisir, le mieux de les essayer tous les deux par vous même ! ;-)
Références internet :
- Python Language Website : site officiel de Python
- Zope (Z Object Publishing Environment) : un manager de serveur d'applications web en Open Source, entièrement écrit en Python
- Présentation du langage Python : page sur les caractéristiques de Python
- Didacticiel Python : origines, avantages et inconvénients de Python
- Python - The Most Elegant Scripting Language You'll Probably Never Use : un très bon article sur Python et ses avantages
- perfaq1 - Questions d'ordre général sur Perl : faq générale sur Perl
- Choosing a scripting language : choisir un langage de scripts entre Perl, Tcl et Python
- Python versus Perl : message tiré d'un forum, comparant les deux langages
- A Perl Hacker in the Land of Python : où Python vu par un hacker Perl
- Comparing Python to Other Languages : article écrit par l'auteur de Python, comparant Python à Java, Javascript, Perl, Tcl, Smalltalk, C++, Common Lisp et Scheme (voir aussi http://www.python.org/doc/Comparisons.html)
- Perl/Python Phrasebook : une comparaison pointue sur la syntaxe des deux langages
- Comparaison de langages de scripts : exemple de code écrit dans des langages de script différents (la page à l'adresse http://www.culte.org/projets/doc/scripting.shtml est indisponible pour le moment, je me permet donc de la stocker temporairement sur mon site)
- Les Langages de Scripts : présentation des différents langages de scripts existants