Google’s Go pourrait enfin ajouter des génériques, longtemps recherchés par de nombreux utilisateurs de Go comme un mécanisme pour simplifier le langage.
UNE Aller proposition de changement de langue déposé le 12 janvier dans GitHub appelle à l’ajout de la prise en charge des paramètres de type pour les types et les fonctions, permettant ainsi une forme de programmation générique. Efforts pour ajouter des génériques à Go depuis des années, la prise en charge des génériques étant l’une des fonctionnalités les plus demandées depuis la sortie de Go en 2009. Désormais, les développeurs de Go pourraient voir une implémentation d’ici la fin de cette année, peut-être incluse dans Go 1.18 versions bêta. La mise en œuvre serait complète mais peut-être pas entièrement optimisée.
Les génériques peuvent fournir des blocs de construction puissants pour partager du code et créer plus facilement des programmes. Avec la programmation générique, l’écriture de fonctions et de structures de données peut être effectuée d’une manière où certains types sont spécifiés par la suite. Par exemple, un développeur pourrait écrire une fonction qui opère sur une tranche d’un type de données arbitraire, où le type de données réel est spécifié lorsque la fonction est appelée. Un développeur pourrait également définir une structure de données qui stocke des valeurs de tout type, dans laquelle le type réel à stocker est spécifié lorsqu’une instance de la structure de données est créée.
Les changements de haut niveau dans la proposition de programmation générique pour Go comprennent:
- Les fonctions peuvent avoir une liste de paramètres de type supplémentaire qui utilise des crochets, mais qui autrement ressemble à une liste de paramètres ordinaire:
func F[T any](p T) ...
- Ces paramètres de type peuvent être utilisés par les paramètres réguliers et dans le corps de la fonction.
- Les types peuvent également avoir une liste de paramètres de type:
type MySlice[T any] []T
- Chaque paramètre de type a une contrainte de type, tout comme chaque paramètre ordinaire a un type:
func F[T Constraint](p T) ...
- Les contraintes de type sont des types d’interface.
- Le nouveau nom prédéclaré
any
est une contrainte de type qui autorise n’importe quel type. - Les types d’interface utilisés comme contraintes de type peuvent avoir une liste de types prédéclarés; seuls les arguments de type qui correspondent à l’un de ces types satisfont à la contrainte.
- Les fonctions génériques ne peuvent utiliser que les opérations autorisées par leurs contraintes de type.
- L’utilisation d’une fonction ou d’un type générique nécessite de passer des arguments de type.
- L’inférence de type permet d’omettre les arguments de type d’un appel de fonction dans les cas courants.
Adapter les génériques à un langage tel que Go est une tâche difficile, comme l’indiquent des tentatives infructueuses datant de 2010. Au cours des deux dernières années, les développeurs de Go ont travaillé sur une série de projets de conception qui ont abouti à une conception basée sur des paramètres de type. L’ébauche a reçu la contribution de la communauté de programmation Go, et il y a eu quelques expériences avec elle via le aire de jeux génériques.
Les changements de langage prévus pour la prise en charge des génériques sont rétrocompatibles, de sorte que les programmes Go existants continueraient à fonctionner. La version actuelle de Go est la version 1.15, avec Go 1.16 maintenant en phase bêta. Une version de production de Go 1.16 est prévue pour le mois prochain.
Droits d’auteur © 2021 IDG Communications, Inc.