- Un article sur l’importance de la rétrocompatibilité dans le langage de programmation Go, centré sur les nouvelles fonctionnalités de Go 1.21 et l’avenir de Go 2
- Go 1.21 inclut de nouvelles fonctionnalités pour améliorer la compatibilité, avec pour objectif de garder Go stable et prévisible, afin que les développeurs puissent se concentrer sur leur travail plutôt que sur les changements du langage
- L’équipe Go met l’accent sur la compatibilité depuis plus de 10 ans, avec l’intention claire que les programmes écrits conformément à la spécification Go 1 continuent à se compiler et à s’exécuter correctement sans modification pendant toute la durée de vie de cette spécification
- Explication de deux approches principales pour maintenir la compatibilité : la vérification des API et les tests. La vérification des API garantit que les API existantes ne sont pas supprimées ni modifiées d’une manière qui casserait le code existant. Les tests consistent à exécuter les tests existants sur une version de développement de la prochaine release de Go
- Exemples de problèmes de compatibilité subtils découverts en testant Go en interne chez Google, notamment autour des littéraux de structure et des nouveaux champs, ainsi que de la précision du temps
- Les problèmes de compatibilité sont classés en trois catégories : modifications de sortie, modifications d’entrée et modifications de protocole
- Go 1.21 améliore la rétrocompatibilité en étendant et en formalisant l’usage de
GODEBUG. Les paramètres GODEBUG sont conservés pendant au moins deux ans et sont configurés pour correspondre à la version de Go indiquée dans le fichier go.mod du package principal
- L’article se conclut par une mise à jour sur Go 2, en annonçant qu’il n’y aura pas de Go 2 qui casserait les programmes Go 1. À la place, l’équipe Go continuera à donner la priorité à la compatibilité, qu’elle considère comme la décision de conception la plus importante prise pour Go 1
1 commentaires
Avis sur Hacker News
GODEBUGpour chaque changement et des métriques pour détecter l’usage des implémentations précédentes, ainsi qu’une version de toolchain par module qui récupère automatiquement les anciennes et nouvelles toolchains Go.