5022Fermer5024
UtherLe 23/08/2023 à 21:26
flanker (./5020) :
L'équivalent de ton exemple en Rust est un interpréteur Python qui peut interpréter mélanger du code Python 2 et du code Python 3, n'est-ce pas ? Ça tombe bien, c'est possible, au seul prix d'ajouter import __futures__.
Il n'est pas possible d'aller plus loin, ne serait-ce qu'à cause du problème str/unicode : dans de nombreux cas, ce qui est théoriquement la bonne solution (changer "" en b"") est souvent la mauvaise (car le développeur a eu la flemme de mettre u""). Je ne parle même pas des problèmes liés à la bibliothèque standard.
Alors je suis pas un expert python, loin de là donc n’hésite pas a me corriger si j'ai faux, mais de ce que j'avais compris, il est problématique de faire que un code conçu spécifiquement pour du Python 2 s’appuie sur des bibliothèques conçues spécifiquement pour du Python 3, et vice versa, sans modification spécifiques dans le code de l'un ou de l'autre. Rust n'a pas ce genre de problème : une crate (l'équivalent du package) a un numéro d'édition, ce qui permet au compilateur de savoir quelle syntaxe appliquer aux fichiers source. Le compilateur peut donc compiler et lier, des crates d'éditions différentes. Lors de la migration, on part d'un code clean dans l'édition précédente pour arriver a un code clean dans la nouvelle édition sans se soucier d'adapter le code pour conserver la rétro-compatibilité. Le fichier manifeste de la crate doit juste à déclarer son numéro d'édition, qui est initialisé à la dernière édition gérée par cargo (l'outil standard de build et de gestion des crate).

flanker (./5020) :Par ailleurs, ce que tu aurais souhaité aurait au contraire mécaniquement ralenti encore plus la transition qui a été déjà trop lente : si tu n'as aucune incitation à migrer ton code (vu que c'est transparent de le garder dans une vieille version), tu ne risques pas de le migrer.
C'est vrai que l'incitation a migrer est moins forte, mais c'est aussi le cas de l'incitation à ne pas migrer. C'est beaucoup plus simple pour un mainteneur de crate de prendre la décision de migrer quand l'on sait qu'on aura pas besoin de se soucier de problèmes causés par les dépendances et qu'on en causera pas a ceux qui dépendent de nous. Dans la pratique quasiment toutes les crates Rust maintenues font la transition dans les mois qui suivent la sortie d'une édition.