Vous êtes ici : Accueil Actualités Python 3.3.0 : verdict

Python 3.3.0 : verdict

La nouvelle mouture était à peine sortie qu'elle était téléchargée, compilée et exécutée sur tous mes projets, sur des plate-formes de test.

Avant-Propos

Par habitude, la rubrique actualité se contente d'être un simple relais et permet de tenir informé d'une petite partie des événements qui font vivre le monde des pythonistes. Cette fois-ci, face à un événement attendu (au moins par moi mais je pressens ne pas être seul), j'ai mis les mains dans le cambouis, j'ai trituré du code dans la mesure de mon temps disponible (rare en ce moment, ce qui se voit dans la fréquence de publication des actualités) et je livre ici un verdict qui m'appartient et qui en tant que tel est parfaitement subjectif.

De Python 3.2 à Python 3.3

Personnellement, je suis convaincu depuis longtemps de la nécessité de faire évoluer Python et de provoquer la rupture de compatibilité descendante. Je fais partie des rares qui pense que c'est un mal nécessaire, mais indispensable et je suis prêt à "payer" mes opinions en mettant en branle des phases de développement sur des paliers purement techniques, pas toujours simple à justifier auprès des MOA. Et quitte à faire cela, je serais allé encore plus loin (en notant un dictionnaire vide ainsi {:} pour laisser l'ensemble vide être désigné ainsi {} par exemple. Mais là n'est pas la question. Les décisions prises sont un compromis que je respecte et je les fais miennes sans aucun état d'âme.

C'est pourquoi depuis la sortie de Python 3.1 je démarre tous mes nouveaux projets avec la dernière version en date de Python 3 et je les fais évoluer pour qu'ils puissent monter de version en profitant de toutes les nouveautés (et il y a de quoi se faire plaisir). Le passage de Python 3.1 à 3.2 a nécessité quelques interventions à la marge pour rester iso-fonctionnel. La première question que je me pose est donc : Quelle est l'impact de Python 3.3 sur mes projets Python 3?

Comme je m'y attendais, aucun dysfonctionnement n'est apparu, aucun test unitaire n'a sourcillé et les applications continuent de fonctionner, ce qui a été validé par le passage de tous les scénarios de tests fonctionnels. La conclusion est simple : Elles sont prêtes à tourner sur le nouveau Python 3, sans qu'aucun changement ne soit nécessaire.

Par contre, les augmentations fonctionnelle laissent entrevoir de nouvelles opportunités d'optimisations, mais nous ne sommes plus dans l'iso-fonctionnel. Certaines évolutions ont donc été réalisées et elles permettent une simplification de certaines parties du code et quelques améliorations de performance (à la marge).

De Python 2.x à Python 3.3

Comme d'habitude, on garde le meilleur pour la fin. Un des aspect de Python 3.3 est de "revenir en arrière" sur des changements importants survenus entre Python 2.x et 3.x qui sont jugés comme mineurs, mais bloquants pour la migration d'application Python 2.x vers 3.x. Personnellement, j'ai effectivement subi ces problèmes pour la migration d'applications complexes et bien que les scripts 2to3 sont efficaces, il reste une partie importante du travail à réaliser. Mais une bonne dose d'expérience et chaque migration s'est révélée plus facile (surtout lorsqu'elles utilisaient des briques communes.

Donc, je vous avoue sans détours que cette fonctionnalité n'était pas parmi celles que j'attendais, sur le plan personnel, avec le plus d'impatience. Et cela pour une simple raison  je maîtrise de bout en bout toutes les briques de mes applications en dehors de composants simples dont j'ai pu trouver des alternatives (voir le tutoriel sur oursql).

J'ai rapidement repris le dernier commit sous Python 2.x d'une de mes plus petite applications (12 000 lignes de code) et ai refais l'opération consistant à effectuer la migration vers Python 3.3. Il est vrai qu'elles s'est avérée plus facile que dans mes souvenirs. (conclusion contestable car les souvenirs ne sont pas une référence et qu'à ce jour, je bénéficie d'une expérience de migration plus grande qu'à l'époque). Mais le fait reste là : La migration a pu être faite en une petite journée, au lieu d'une bonne semaine à l'époque, et sans surprises.

Le véritable enjeu de cette nouvelle version est visible pour des applications complexes construite par des communautés plus ou moins hétérogènes et dont le code est si ramifié entre ses composants que la migration nécessite que chacun travaille ensemble et que le code puisse plus ou moins se ressembler entre Python 2.x et 3.x. Je pense à des applications comme Django à Turbogears (par ordre d'hétérogénéïté des communautés des composants applicatifs).

Conclusion

Pour ma part, je vais continuer à écrire en utilisant une grammaire 3.x et profiter de toutes les "avancées" possibles. J'attends avec impatience la migration de certains composants, en particulier pour le Web. Espérons que Python 3.3 hâtera le processus.

Mots-clés associés : , ,

Spinner