5016Fermer5018
flankerLe 23/08/2023 à 10:00
Zeph (./5015) :
Autant je te rejoins sur le fait que cette transition était infernale et sans fin, autant je ne sais pas s'il y avait une façon de mieux gérer des breaking changes aussi importants que ceux qu'ils avaient à passer pour corriger plein de mauvais choix faits dans la version 2.
C'est exactement ça.

Uther (./5016) :
Je ne dis pas que la transition n'était pas nécessaire mais je suis convaincu qu'elle aurait pu être mieux organisée pour éviter de couper en deux l’écosystème pendant si longtemps.
Je ne connais pas assez Python en détail pour être sur, mais il y avait probablement moyen de s'en sortir avec des déprécations combinées à un système similaire aux édition de Rust (support de différentes version de la syntaxes par le même compilateur).
Mais il y a eu plein de systèmes pour faciliter la transition, soit en transformant automatiquement ton code Python 2 en Python 3 (outil 2to3) ou le contraire (3to2). Tu pouvais également faire du code compatible Python2 et Python3 simultanément (avec import __futures__ qui ne faisait rien en Python 3 mais patchait en Python2).
Par expérience, et je ne pense pas être le seul, le plus gros problème venait des strings/byte strings de Python2.
Pour mémoire, en Python2 "toto" est une chaîne d'octets et u"toto" est un texte Unicode. "♥" ne fonctionne pas mais u"♥" fonctionne.
En Python3, "toto" est un texte Unicode et b"toto" est une chaîne d'octets. b"♥" ne fonctionne pas mais "♥" fonctionne.

En théorie, on peut donc faire une conversion automatisée en transformant les "" en b"" et les u"" en "" pour avoir du Python3 valide… sauf que beaucoup de code Python2 mélangeait allègrement u"" et "" (car la conversion de "" en u"" pouvait être transparente). Je pense que c'était une des principales sources de bugs en Python2, surtout quand avec des caractères accentués.

Le gros problème restant qui n'a pas été corrigé par Python3 reste celui de la portée des variables, mais en pratique il est très rarement rencontré (et encore plus avec des IDE dignes de ce nom* qui vont te bouffer les doigts quand tu fais ce genre de choses).

Et si ce n'était techniquement pas possible de faire une transition plus naturelle, il aurait au moins fallu forcer d'avantage pour qu'elle aille beaucoup plus vite.
C'est dangereux de forcer une communauté qui ne te doit rien. De plus, en pratique, à part quelques bibliothèques (surtout liées au réseau, qui manipulent souvent texte et chaînes binaires), la transition a été lente mais pas tant que ça. Ça fait très longtemps (au moins 8-9 ans) que je n'utilise plus que du Python 3.


[*] Je sais, je suis pénible avec PyCharm, mais j'ai fréquemment rencontré des personnes qui sont persuadées d'être plus efficaces avec Notepad++, Emacs (ou Vim, pas de jaloux), et qui se retrouvent à corriger des bugs qui auraient été immédiatement affichés par PyCharm… (et il y a 10 ans, quand j'ai évalué PyCharm, aucun autre IDE n'arrivait à la hauteur).