Go 1.18 est désormais disponible en version de production. Téléchargeable sur go.dev depuis le 15 mars, la dernière itération introduit le support du code générique utilisant des paramètres de types. Selon certains, l’ajout de ces fonctionnalités génériques représente le changement le plus important du langage de programmation depuis la sortie de Go 1.0 en 2012. C'était également la fonctionnalité la plus demandée par les développeurs Go. Les versions ultérieures fourniront un support supplémentaire pour des cas d’usage générique plus complexes.
Les utilisateurs peuvent trouver plus d’informations sur cette fonctionnalité via un tutoriel sur les génériques et des notes de version. Le serveur de langage Go gopls et l'extension Visual Studio Code Go prennent désormais en charge les génériques. Cette documentation explique comment installer gopls avec les génériques. Pour configurer l'extension VS Code Go, suivez ces instructions. Les instructions d'installation sont disponibles sur go.dev. Et les notes de version sont publiées sur tip.golang.org.
Des génériques très attendus
Cette version de production de Go 1.18 arrive après une version bêta et une candidate release. La date de sortie a été légèrement retardée, la version de production étant prévue à l’origine pour le mois de février 2022. Livrée le 14 décembre, la Beta 1 de Go 1.18 était la première version du langage open source développé par Google à inclure le support du code générique utilisant des paramètres de types. Preuve de cette attente, la première bêta de Go 1.18 a été la plus téléchargée de tous les temps, donnant lieu à deux fois plus de téléchargements que n'importe quelle bêta antérieure.
La programmation générique apporte une amélioration, car elle donne accès à une représentation de fonctions et de structures de données sous forme générique, avec prise en compte des types. Les génériques peuvent fournir des blocs de construction pour partager le code et faciliter la création de programmes. Dans un billet de blog, l'équipe de Go a néanmoins rappelé que, comme c’est le cas avec toute nouvelle fonctionnalité importante, les utilisateurs devaient s’attendre à quelques bogues. Car les génériques ne devraient pas faire exception à cette règle. C’est pourquoi, ils conseillent aux développeurs d'aborder les nouveaux génériques avec la prudence qui s’impose. De plus, la prise en charge de certains cas subtils, notamment des types spécifiques de types génériques récursifs, a été reportée à des versions ultérieures.
Cependant, selon l'équipe de développeurs de Go, certains utilisateurs précoces sont « plutôt satisfaits ». Un bref tutoriel expliquant comment démarrer avec les génériques est disponible. Selon un billet de blog publié en juillet 2019, même si Go gère déjà les types Interface, une capacité proche d’une programmation générique, le langage ne fournissait pas ce que les développeurs de Go souhaitaient offrir avec les génériques. Par exemple, les développeurs favorables aux génériques dans Go voulaient rendre possible l’écriture de fonctions de type Reverse sans avoir à se soucier des éléments de type dans un tableau dynamique (Slice).
D’autres évolutions
Parmi les autres nouveautés de Go 1.18, on peut citer :
- Un support intégré pour l'écriture de tests basés sur le fuzzing, de façon à trouver plus facilement les entrées automatiques qui font planter un programme ou renvoient des réponses invalides.
- La possibilité pour les développeurs de travailler avec plusieurs modules Go simultanément dans un mode d’espace de travail Go, ce qui est important pour les grands projets.
- Une commande go version -m étendue qui enregistre désormais les détails de la construction, comme les indicateurs de compilation.
- La possibilité pour les utilisateurs de sélectionner l'une des quatre versions de l'architecture AMD64 grâce à la variable d'environnement GOAMD64.
- La performance des CPU sur Apple M1, ARM64 et PowerPC64 ont été améliorées de 20 % grâce à l'extension à ces architectures de la convention d'appel pour l’interface binaire d’application (ABI) du registre de Go 1.17.
- Les ports Windows/Arm et Windows/Arm64 supportent désormais la préemption non coopérative, apportant cette capacité aux quatre ports Windows et, corrigeant, il faut l’espérer du moins, les bogues subtils rencontrés lors de l'appel de fonctions Win32 qui bloquaient pendant de longues périodes.
- Le ramasse-miettes inclut désormais les sources de travail du GC (Garbage Collector) qui ne sont pas dans le heap quand il détermine la fréquence d'exécution. Cette fonction rend la surcharge du GC plus prévisible quand ces sources sont importantes.
La version 1.17 de Go a été publiée en août dernier. Le langage est sans doute plus connu pour avoir servi de base au développement du système de conteneurs Docker. Les développeurs à l’origine de Go souhaitaient proposer un langage de programmation simple et facile à apprendre, avec une forte prise en charge de la concurrence.
Commentaire