Go 1.21, la dernière mise à jour du langage de programmation Go de Google, est désormais disponible en version de production. La nouvelle version ajoute des fonctions intégrées - min, max et clear - et généralise l'optimisation guidée par le profil (PGO). Les adaptations de WebAssembly sont également mises en évidence. Les fonctions min et max calculent respectivement la plus petite ou la plus grande valeur d'un nombre fixe d'arguments ou de types ordonnés. Il doit y avoir au moins un argument. La fonction clear prend un argument de type map, slice ou type paramètre et supprime ou met à zéro tous les éléments.
Publié ce 8 août, Go 1.21 peut être téléchargé depuis le site web du projet. La version de production fait suite à une candidate release publiée le 21 juin. L'optimisation guidée par le profil, introduite en avant-première dans Go 1.20 en février, sort du statut de preview dans cette version. PGO donne la capacité à la chaîne d'outils du compilateur d'effectuer des optimisations spécifiques à la charge de travail et à l'application en se basant sur les informations du profil d'exécution. Jusqu'à présent, PGO a amélioré les performances de 2 à 7 % lorsque l'impact a été mesuré sur un large éventail de programmes, selon les développeurs du projet Go. Le compilateur Go a été reconstruit avec PGO activé. Go 1.21 promet d'autres améliorations des performances. L'optimisation du ramasse-miettes ouvrairait la voie pour certaines applications à bénéficier d'une réduction de 40 % de la latence queue, tandis que la collecte de traces avec runtime/trace entraîne désormais un coût CPU beaucoup plus faible sur les systèmes AMD64 et Arm64.
Zoom sur les évolutions de Go 1.21
- Un portage expérimental WASI (WebAssembly System Interface) est en preview. Pour faciliter l'écriture avec davantage de code WebAssembly, le compilateur supporte également une nouvelle directive wasmimport pour importer des fonctions de l'hôte Wasm ;
- La bibliothèque standard ajoute un paquetage log/slog pour la journalisation structurée. Un autre paquetage slices est aussi proposé pour les opérations courantes sur les slices de n'importe quel type d'élément. Il inclut des fonctions de tri qui sont généralement plus rapides et plus ergonomiques que le package sort ;
- La bibliothèque standard ajoute également un nouveau paquetage maps pour les opérations courantes sur les maps de n'importe quel type de clé ou d'élément. Un nouveau paquetage cmp inclut des utilitaires inédits pour comparer des valeurs ordonnées ;
- L'outil go prend désormais en charge la compatibilité linguistique ascendante et descendante.
Des améliorations ont été apportées à l'inférence de type pour les fonctions génériques. La description de l'inférence de type a été étendue et clarifiée dans la spécification ;
- Si une future version de Go traitera d'un problème courant dans le langage : la capture des variables de boucle, la v1.21 de ce langage dispose de cette capacité mais qui doit être activée dans le code à l'aide d'une variable d'environnement.