<html> <head><title>Prsentation du langage Python</title></head> <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#000080">  <h1>Prsentation du langage Python</h1>  <p> Python est un langage portable, dynamique, extensible, gratuit, qui permet (sans l'imposer) une approche modulaire et oriente objet de la programmation. Python est developp depuis 1989 par Guido van Rossum et de nombreux contributeurs bnvoles. </p>  <h2>Caractristiques du langage</h2>  <p> Dtaillons un peu les principales caractristiques de Python, plus prcisment, du langage et de ses deux implantations actuelles: </p>  <ul> <li>Python est <b>portable</b>, non seulement sur les diffrentes variantes d'UNiX, mais aussi sur les OS propritaires: MacOS, BeOS, NeXTStep, M$-DOS et les diffrentes variantes de Window$. Un nouveau compilateur, baptis JPython, est crit en Java et gnre du <em>bytecode</em> Java.  <li>Python est <b>gratuit</b>, mais on peut l'utiliser sans restriction  dans des projets commerciaux.  <li>Python convient aussi bien  des <b>scripts</b> d'une dizaine de lignes qu' des <b>projets complexes</b> de plusieurs dizaines de milliers de lignes.  <li>La <b>syntaxe</b> de Python est trs simple et, combine  des <b>types de donnes volus</b> (listes, dictionnaires,...), conduit  des programmes  la fois trs compacts et trs lisibles. A fonctionnalits gales, un programme Python (abondament comment et prsent selon les canons standards) est souvent de 3  5 fois plus court qu'un programme C ou C++ (ou mme Java) quivalent, ce qui reprsente en gnral un temps de dveloppement de 5  10 fois plus court et une facilit de maintenance largement accrue.  <li>Python gre ses ressources (mmoire, descripteurs de fichiers...) sans  intervention du programmeur, par un mcanisme de <b>comptage de rfrences</b> (proche, mais diffrent, d'un <em>garbage collector</em>).  <li>Il n'y a <b>pas de pointeurs</b> explicites en Python.  <li>Python est (optionnellement) <b>multi-thread</b>.  <li>Python est <b>orient-objet</b>. Il supporte l'<b>hritage multiple</b> et la <b>surcharge des oprateurs</b>. Dans son modle objets, et en reprenant la terminologie de C++, toutes les mthodes sont virtuelle.  <li>Python intgre, comme Java ou les versions rcentes de C++, un systme  d'<b>exceptions</b>, qui permettent de simplifier considrablement la gestion des erreurs.  <li>Python est <b>dynamique</b> (l'interprteur peut valuer des chanes de caractres reprsentant des expressions ou des instructions Python), <b>orthogonal</b> (un petit nombre de concepts suffit  engendrer des constructions trs riches), <b>reflectif</b> (il supporte la <em>mtaprogrammation</em>, par exemple la capacit pour un objet de se rajouter ou de s'enlever des attributs ou des mthodes, ou mme de changer de classe en cours d'excution) et <b>introspectif</b> (un grand nombre d'outils de dveloppement, comme le <em>debugger</em> ou le <em>profiler</em>, sont implants en Python lui-mme).  <li>Comme <em>Scheme</em> ou <em>SmallTalk</em>, Python est <b>dynamiquement typ</b>. Tout objet manipulable par le programmeur possde un type bien dfinit  l'excution, qui n'a pas besoin d'tre dclar  l'avance.  <li>Python possde actuellement deux implmentations. L'une, <b>interprte</b>, dans laquelle les programmes Python sont compils en instructions portables, puis excuts par une machine virtuelle (comme pour Java, avec une diffrence importante: Java tant statiquement typ, il est beaucoup plus facile d'acclrer l'excution d'un programme Java que d'un programme Python). L'autre, gnre directement du <em>bytecode</em> Java.  <li>Python est <b>extensible</b>: comme <em>Tcl</em> ou <em>Guile</em>, on peut facilement l'interfacer avec des librairies C existantes. On peut aussi s'en servir comme d'un <b>langage d'extension</b> pour des systmes logiciels complexes.  <li>La <b>librairie standard</b> de Python, et les paquetages contribus, donnent accs  une grande varit de services: chanes de caractres et expressions rgulires, services UNIX standard (fichiers, <em>pipes</em>, signaux, sockets, threads...), protocoles Internet (Web, News, FTP, CGI, HTML...), persistence et bases de donnes, interfaces graphiques.  <li>Python est un langage qui <b>continue  voluer</b>, soutenu par une communaut d'utilisateurs enthousisates et responsables, dont la plupart sont des supporters du logiciel libre. Paralllement  l'interprteur principal, crit en C et maintenu par le crateur du langage, un deuxime interprteur, crit en Java, est en cours de dveloppement. </ul>   <h2>Domaines d'application</h2>  Les domaines d'application naturels de Python incluent entre autres: <ul> <li>L'apprentissage de la programmation objet.   <li>Les scripts d'administration systme ou d'analyse de fichiers textuels.  <li>Tous les dveloppement lis  l'Internet et en particulier au Web: scripts CGI, navigateurs Web, moteurs de recherche, agents intelligents, objets distribus...  <li>L'accs aux bases de donnes (relationnelles).  <li>La ralisation d'interfaces graphiques utilisateurs.  <li>Le calcul scientifique et l'imagerie. Python ne sert alors pas  crire les algorithmes, mais  combiner et mettre en oeuvre rapidement des librairies de calcul crites en langage compil (C, C++, Fortran, Ada,...).  <li>Le prototypage rapide d'applications. L'ide gnrale est de commencer par crire une application en Python, de la tester (ou de la faire tester par le client pour d'ventuelles modifications du cahier des charges). Trois cas peuvent alors se prsenter: <ul> <li>Les performances sont satisfaisantes, aprs optimisation ventuelle du code Python. On livre alors le produit tel quel au client. <li>Les performances ne sont pas satifaisantes, mais l'analyse de l'excution du programme ( l'aide du <em>profiler</em> de Python) montre que l'essentiel du temps d'excution se passe dans une petite partie du programme. Les fonctions, ou les types de donnes, correspondants sont alors rcrits en C ou en C++, sans modification du reste du programme. <li>Sinon, il est toujours possible de rcrire tout le programme, en utilisant la version Python comme un brouillon. </ul> Mme dans le pire des trois cas, il est trs vraissemblable que le temps de dveloppement aura t sensiblement plus court que si le programme avait t dvelopp directement en C ou en C++. </ul>   Voici une liste de projets reprsentatifs bass sur Python: <ul> <li><a href="http://monty.cnri.reston.va.us/grail/">Grail</a>, un  navigateur Web crit intgralement en Python, par Guido van Rossum lui-mme.  <li><a a href="ftp://ftp.parc.xerox.com/pub/ilu/ilu.html">ILU</a>, Hector,  <a href="http://www.cs.colorado.edu/~carlosm/software.html">Paos</a>, diffrents systmes d'objets distribus.  <li><a href="http://bscw.gmd.de/">BSCW</a>,  <a href="http://www.cs.colorado.edu/~carlosm/chautauqua.html">Chautaqua</a>, <a href="http://oso.saic.com/forvm/">ForVM</a>, des systmes de travail en groupe (<em>groupware</em>).  <li>Les programmes d'administration systme spcifiques   la distribution Red Hat Linux.  <li>Des moteurs de recherche comme <a href="http://www.infoseek.com/">Infoseek</a> ou <a href="http://www.yahoo.com">Yahoo!</a>.  <li>D'innombrables scripts CGI.  </ul>   <h2>Le programme d'exemple</h2>  <p> <em><a href="newsgate.py">Newsgate</a></em> est une passerelle qui permet de publier les <em>news</em> (Usenet) sur un serveur Web. Il convient de l'installer dans en tant que script CGI sur votre serveur Web, dans mon cas Apache sous Linux.  Les constantes <tt>BASE_URL</tt> et <tt>SERVER</tt> devront tre adaptes  votre configuration locale. </p>  <p> Le programme utilise de faon cruciale le module <tt>nntplib</tt> de la bibliothque Python standard (NNTP, <em>Network News Transfert Protocol</em>, est le protocol standard de l'Internet pour l'accs aux <em>news</em>). Les requtes sont encodes dans l'URL, sous la forme: "&lt;BASE_UR>/&lt;nom_de_la_requte>/&lt;arg1>/&lt;arg2>/...". Un objet de classe <tt>NewsGate</tt> est charg de repondre aux requtes. La classe <tt>NewsGate</tt> hrite de la classe <tt>CGI</tt> qui gre le dcodage des requtes et l'envoi des hauts et bas de pages. </p>  <p> La mise en page est reste volontairement simpliste, pour ne pas allonger le listing. C'est un exercice laiss au lecteur que d'enrichir la mise en page et d'ajouter des fonctionalits, comme par exemple la possibilit de poster des messages. </p>  <p> Vous pouvez essayer le programme  l'URL: <a href='http://fermivista.math.jussieu.fr/cgi-bin/newsgate/'>http://fermivista.math.jussieu.fr/cgi-bin/newsgate/</a>. </p>  <h2>Rfrences</h2>  <p> Le site officiel de Python est <a href="http://www.python.org/">www.python.org</a>. On y trouvera la distribution officielle, de nombreux paquetages contribus, les compte-rendus des six confrences Python qui se sont dj tenue  ce jour. </p>  <p>En plus de la documentation intgre  la distribution standard, disponible galement sur le site officiel et compose d'un  <a href="http://www.python.org/doc/tut/">tutoriel</a>, du  <a href="http://www.python.org/doc/ref/">manuel de rfrence du langage</a> et de celui de la  <a href="http://www.python.org/doc/lib/">librairie standard</a>,  on pourra consulter les deux livres parus actuellement sur Python (en anglais, pas de traduction prvue en franais pour l'instant): </p>  <ul> <li><em>Programming Python</em>, de Mark Lutz, O'Reilly, 1996. <li><em>Internet Programming with Python (IPwP)</em>, de Aaron Watters, Guido van Rossum et James C. Ahlstrom, M&amp;T Books, 1996. </ul>  <em> Une version dite de cet article est parue dans le magazine <b>Programmez!</b> en novembre 1999. </em>  </body> </html> 
