Sortie de Go 1.18 avec support de la programmation générique

Par:
fredericmazue

ven, 18/03/2022 - 00:00

L'équipe Google de développement du langage Go a publié Go 1.18, dont la caractéristique principale est le support de la programmation générique. L'apport des génériques est le changement le plus important apporté à Go depuis la sortie de Go 1, selon l'équipe de Go.

La programmation générique de Go utilise des types paramétrés. Voici un exemple simple pour donner une idée de ce qu'est le travail avec la programmation générique en Go.

Soit une fonction classique qui inverse la liste d'entiers qu'elle reçoit en argument :

func ReverseInts(s []int) {
    first := 0
    last := len(s)
    for first < last {
        s[first], s[last] = s[last], s[first]
        first++
        last--
    }
}

L'équivalent en programmation générique sera :

func Reverse (type Element) (s []Element) {
    first := 0
    last := len(s) - 1
    for first < last {
        s[first], s[last] = s[last], s[first]
        first++
        last--
    }
}

Le corps de la fonction est exactement le même. Seule la signature de la fonction a changé. La fonction reçoit un paramètre de type et s'invoque ainsi :

func ReverseAndPrint(s []int) {
    Reverse(int)(s)
    fmt.Println(s)
}

Go 1.18 est encore, selon les termes de Google, le premier langage majeur avec fuzzing entièrement intégré dans sa chaîne d'outils standard. Le fuzzing (ou test à données aléatoires) est une technique pour tester des programmes. L'idée est d'injecter des données aléatoires dans les entrées d'un programme. Si le programme échoue (par exemple en plantant ou en générant une erreur), alors il y a des défauts à corriger.

Enfin, toujours selon Google, les utilisateurs d'Apple M1, ARM64 et PowerPC64 se réjouiront de Go 1.18, car celui-ci inclut des améliorations des performances du processeur allant jusqu'à 20 % en raison de l'extension de la convention d'appel ABI de registre de Go 1.17 à ces architectures.