Evolution d’un langage de programmation en fonction de son environnement, l’exemple de Python

13 Mai 2019
langage_programmation
Tout langage de programmation est contraint à un environnement spécifique dans lequel il évolue. Jérémie illustre cette notion aujourd’hui avec l’exemple de Python.

Le classement TIOBE est la référence en termes de rankings de langages de programmation. Il mesure la popularité sur la base du nombre de pages retournées par un moteur de recherche lorsqu’on lui soumet le nom du langage. Cette distinction récompense la meilleure progression. Or, TIOBE consacre une nouvelle fois Python comme langage de programmation de l’année 2018, suite à ces précédents titres de 2010 et 2007. En mars 2019, Python se classe troisième (derrière Java et C). En toute logique, cette Actualité Technique prendra donc pour support ce langage.

 

Un langage "portable" et "interprété"

Un script brut Python fonctionnera théoriquement sur n’importe quelle implémentation. Cela signifie qu’un script écrit sous Linux Ubuntu avec une installation Python 3.7 et exécuté sous Windows 10 avec une installation Python 3.7 fournira le résultat attendu.

Il faut néanmoins tempérer cet optimisme… En effet, un script écrit en Python 3.x deviendra problématique s’il est exécuté dans un environnement 2.y. Dans une moindre mesure, un script écrit en 2.y posera des difficultés dans un environnement 3.x. Autrement dit, un script écrit en Python 3.x peut poser des problèmes avec un interpréteur de version antérieure 3.y avec y < x s’il utilise les dernières évolutions du langage.

On note effectivement plusieurs évolutions du langage entre Python 2 et Python 3. Les auteurs de Python ont justifié la rupture de compatibilité entre la branche 2 et 3 par le volume de changements. En voici quelques exemples :

python

Python avait besoin d’une refonte, et le confort gagné à utiliser la branche 3 est appréciable pour un programmeur expérimenté. De plus, le site de Python propose toute une stratégie pour porter un programme Python 2 vers Python 3.

Dans un langage quasiment figé, comme le C immuable depuis 1999, ce problème d’adaptation se posera beaucoup moins. Cependant, les langages moins portables posent problème lorsqu’on change de machine (Linux vers Windows).

De manière simple, livrer à un client un script Python nécessite que ce dernier installe un environnement Python.

Il existe cependant plusieurs moyens de contourner ces problèmes. AUSY recommande l’outil « Nuitka », projet impressionnant réalisé par un développeur allemand. Nuitka transforme le code Python en C ou C++, puis le compile en exécutable (sans gain de performance). Il suffit donc de livrer l’exécutable et toutes les librairies pour espérer voir le programme fonctionner chez le client. Nuitka ne solutionne cependant pas les potentiels problèmes de compatibilité sur les versions de librairies dynamiques : code chargé dynamiquement, durant l’exécution du programme, qui impose donc une librairie locale mise à jour.

 

Il existe plusieurs techniques de production de programmes :

Mode A. Compilation classique (C, C++) :

Fichier source → Compilateur → Fichier code objet → Éditeur de Liens → Fichier exécutable → Exécuteur → Résultat à l’écran

Il n’y a jamais de compilation classique en Python. En fait, ce langage réalise très rapidement une compilation automatique à l’exécution et à l’insu de l’utilisateur en créant des fichiers x.pyc pour chaque fichier x.py.

Mode B. Interprétation (Shell, Python, Perl)

Fichier source → Interpréteur → Résultat à l’écran

L’exécution en mode B est très pratique pour vérifier en quelques secondes un élément du langage dont le programmeur ne se souvient pas exactement.

Mode C. Machine virtuelle (Java et Python)

Fichier source → Compilateur → Fichier bytecode → Interpréteur (machine virtuelle) → Résultat à l’écran

On peut utiliser Python en ligne de commande (mode B) et sous forme de script (mode C), alors que Nuitka permet de se ramener au mode A.

 

Un bon développeur travaille avec de bons otils, l'importance de l'environnement

Pour développer correctement dans un langage, il faut un bon « IDE » (environnement de développement).

Cet IDE doit au moins permettre :

  • La coloration syntaxique :

code

  • L’auto complétion et la navigation

L’auto complétion permet, lors de l’écriture du programme, de proposer des choix pertinents d’attributs et de variables tandis que la navigation permet d’entrer dans une classe ou une fonction depuis l’appelant avec la souris.

  • La vérification de qualité de code de manière intégrée

Au départ, la commande « lint », qui signifie « touffe hirsute », était une commande UNIX pour vérifier plus profondément un code C. C’est une vérification statique, c’est-à-dire qu’on vérifie le code source sans l’exécuter. La déclinaison de l’antédiluvien lint pour Python est Pylint. Il existe également des équivalents.

Or, le langage Python évolue avec des PEP « Python Enhancement Proposal » : documents proposant des améliorations du langage, dont certaines seront refusées par le comité. Le plus célèbre d’entre eux est le PEP8, qui norme la manière de coder en Python. Par exemple, il exige de mettre des majuscules aux noms de classes etc.

Notre IDE devrait donc intégrer Pylint (ou un équivalent) afin de vérifier la conformité du code au PEP8.

  • Les mises au point en mode « pas à pas »

En effet, certaines erreurs de programmes sont très difficiles à trouver et il faut exécuter les instructions une par une en observant l’évolution de la valeur des variables pour comprendre l’anomalie. Deux projets de l’auteur utilisaient la console (via la bibliothèque « curses ») dont le recours à l’affichage est dans ce cas impossible. L’IDE Wing-Python IDE permet d’exécuter dans deux fenêtres séparées le programme et le pas à pas dans du programme Python.

 

Il existe plusieurs IDE gratuites pour développer en Python :

  • Fournie en standard depuis le site officiel de Python car réalisée par Guido Van Rossum, IDLE n’est pas jugée très pratique.
  • Visual Studio code est une déclinaison Python de Visual Studio de Microsoft, qui est très efficace malgré sa longueur d’installation.
  • La déclinaison Python d’Eclipse, Pydev, est très efficace. C’est d’ailleurs celle utilisée par l’auteur dans un contexte professionnel.
  • Très souvent citée sur le Web, Eric n’a cependant jamais été utilisée par l’auteur. Nous nous garderons donc d’émettre un jugement sur cette IDE.
  • Pycharm est dédiée à Python, et offre des versions gratuite et payante.
  • Wing-python IDE est également dédiée à Python avec des versions gratuite et payante. Grâce à la rigueur permise par cette IDE, c’est le choix de l’auteur !

 

Un des principaux reproches faits à Python, outre sa lenteur, est sa permissivité en matière de typage, qui reporte malheureusement la détection d’erreurs à l’exécution. Bonne nouvelle ! Depuis Python 3.6, il est possible de remédier à ce travers, permettant ainsi de sécuriser de manière significative les gros projets écrits en Python.

 

j.lefrancoisJérémie Lefrançois, consultant AUSY depuis 2004, a écrit ses premiers programmes en Basic sur ZX Spectrum en 1982. Diplômé d'un DESS en Informatique en 1989, il a touché à de nombreux langages informatiques à titre personnel ou professionnel. Il aime effectivement explorer et comparer les possibilités des différents langages et plus spécifiquement approfondir Python qui a sa prédilection depuis 2014. C'est donc avec un grand intérêt qu'il surveille les évolutions de ce langage dynamique dont il apprécie la facilité de mise en œuvre.

 

Aussi n’hésitez pas à visiter notre offre Big Data.

Parlons ensemble de vos projets.

contactez-nous