Prévue pour mars prochain, la future version Go 1.18, et ses fonctionnalités génériques très attendues, est passée au stade de release candidate, après deux versions bêta, dont la dernière, publiée le 31 janvier, corrigeait quelques bogues obscurs dans les génériques, afin de garantir une version finale plus stable. Cependant, les développeurs de Go ont reporté la sortie de la version de production au mois de mars, au lieu du mois de février, prévu initialement. La release candidate a été annoncée le 17 février. Les génériques sont considérés comme le changement le plus important apporté au langage de programmation depuis la sortie de Go 1.0 en 2012.
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.
Quelques bugs à prévoir
Arrivée le 14 décembre, la bêta 1 de Go 1.18, a permis d’avoir un premier aperçu du support du code générique utilisant des types paramétrés par le langage open source développé par Google. Cette première bêta de Go 1.18 a été la plus téléchargée de tous les temps, suscitant deux fois plus de téléchargements que n'importe quelle bêta antérieure. La programmation générique est une amélioration, car elle permet de représenter des fonctions et des structures de données sous forme générique, en prenant en compte les 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 à découvrir quelques bogues. Et 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 qu’il faille se soucier des éléments de type dans un tableau dynamique (Slice).
Les autres nouveautés de Go 1.18
Parmi les fonctions inédites de la dernière version du langage de Google dont on trouvera ici les notes de release, on trouvera également :
- 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 ;
- 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.