Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

La version 1.15 du langage Go est disponible et apporte des changements sur l'implémentation de la chaîne d'outils
Du runtime mais aussi des bibliothèques

Le , par Stéphane le calme

173PARTAGES

13  0 
La dernière version de Go, la version 1.15, arrive six mois après Go 1.14. La plupart de ses changements concernent l'implémentation de la chaîne d'outils, du runtime et des bibliothèques. Comme toujours, la version maintient la promesse de compatibilité Go 1. Go 1.15 inclut des améliorations substantielles de l'éditeur de liens, améliore l'allocation pour les petits objets à un nombre de cœurs élevé et déprécie X.509 CommonName. GOPROXY prend désormais en charge le saut de proxies qui renvoient des erreurs et un nouveau package tzdata intégré a été ajouté.

L'équipe précise qu'aucun changement n'a été apporté au langage.

Les ports

L'équipe indique ceci :
  • Darwin : Comme annoncé dans les notes de publication de Go 1.14, Go 1.15 nécessite macOS 10.12 Sierra ou version ultérieure; la prise en charge des versions précédentes a été interrompue.
  • Comme annoncé dans les notes de publication de Go 1.14, Go 1.15 supprime la prise en charge des binaires 32 bits sur macOS, iOS, iPadOS, watchOS et tvOS (les ports darwin/386 et darwin/arm). Go continue de prendre en charge les ports 64 bits darwin/amd64 et darwin/arm64.
  • Windows : Go génère maintenant des exécutables Windows ASLR lorsque l'indicateur -buildmode=pie cmd/link est fourni. La commande Go utilise -buildmode=pie par défaut sous Windows.

    Les indicateurs -race et -msan activent désormais toujours -d=checkptr, qui vérifie les utilisations de unsafe.Pointer. C'était auparavant le cas sur tous les systèmes d'exploitation à l'exception de Windows.

    Les DLL Go-built ne provoquent plus la fermeture du processus lorsqu'il reçoit un signal (tel que Ctrl-C sur un terminal).
  • Android : Lors de la liaison de binaires pour Android, Go 1.15 sélectionne explicitement l'éditeur de liens lld disponible dans les versions récentes du NDK. L'éditeur de liens lld évite les plantages sur certains périphériques et l'équipe prévoit qu'il devienne l'éditeur de liens NDK par défaut dans une future version de NDK.
  • OpenBSD : Go 1.15 ajoute la prise en charge d'OpenBSD 6.7 sur GOARCH=arm et GOARCH=arm64. Les versions précédentes de Go supportaient déjà OpenBSD 6.7 sur GOARCH=386 et GOARCH=amd64.
  • RISC-V : Des progrès ont été réalisés pour améliorer la stabilité et les performances du port RISC-V 64 bits sous Linux (GOOS=linux, GOARCH=riscv64). Il prend également désormais en charge la préemption asynchrone.
  • 386 : Go 1.15 est la dernière version à prendre en charge le matériel à virgule flottante x87 uniquement (GO386=387). Les futures versions nécessiteront au moins le support SSE2 sur 386, augmentant l'exigence minimale de GOARCH=386 de Go par rapport à Intel Pentium 4 (sorti en 2000) ou AMD Opteron / Athlon 64 (publié en 2003).

Outils

Commande gGo

La variable d'environnement GOPROXY prend désormais en charge le saut des proxys qui renvoient des erreurs. Les URL proxy peuvent désormais être séparées par des virgules (,) ou des caractères pipe (|). Si une URL proxy est suivie d'une virgule, la commande go essaiera uniquement le proxy suivant de la liste après une réponse HTTP 404 ou 410. Si une URL proxy est suivie d'un caractère pipe, la commande go essaiera le proxy suivant dans la liste après toute erreur. Notez que la valeur par défaut de GOPROXY reste https://proxy.golang.org,direct, qui ne revient pas à direct en cas d'erreurs.

go test

La modification de l'indicateur -timeout invalide désormais les résultats des tests mis en cache. Un résultat mis en cache pour une exécution de test avec un long délai d'expiration ne sera plus considéré comme réussi lorsque go test est de nouveau appelé avec un délai d'expiration plus court.

Analyse des indicateurs (flag parsing)

Divers problèmes d'analyse des indicateurs dans go test et go vet ont été corrigés. Notamment, les indicateurs spécifiés dans GOFLAGS sont traités de manière plus cohérente, et l'indicateur -outputdir interprète désormais les chemins relatifs relatifs au répertoire de travail de la commande go (plutôt qu'au répertoire de travail de chaque test individuel).

Cache du module

L'emplacement du cache du module peut maintenant être défini avec la variable d'environnement GOMODCACHE. La valeur par défaut de GOMODCACHE est GOPATH[0]/pkg/mod, l'emplacement du cache du module avant ce changement.

Une solution de contournement est désormais disponible pour les erreurs Windows «Accès refusé» dans les commandes go qui accèdent au cache du module, causées par des programmes externes analysant simultanément le système de fichiers. La solution de contournement n'est pas activée par défaut, car elle n'est pas sûre lors de l'utilisation simultanée des versions Go inférieures à 1.14.2 et 1.13.10 avec le même cache de module. Elle peut être activée en définissant explicitement la variable d'environnement GODEBUG=modcacheunzipinplace=1.


Éditeur de liens

Cette version inclut des améliorations substantielles de l'éditeur de liens Go, qui réduisent l'utilisation des ressources de l'éditeur de liens (à la fois le temps et la mémoire) et améliorent la robustesse / maintenabilité du code.

Pour un ensemble représentatif de grands programmes Go, la liaison est 20% plus rapide et nécessite 30% de mémoire en moins en moyenne pour les systèmes d'exploitation ELF (Linux, FreeBSD, NetBSD, OpenBSD, Dragonfly et Solaris) fonctionnant sur des architectures amd64, avec des améliorations pour d'autres combinaisons architecture / système d'exploitation.

Les principaux contributeurs à de meilleures performances de l'éditeur de liens sont un format de fichier objet récemment repensé et une refonte des phases internes pour augmenter la concurrence (par exemple, en appliquant des déplacements à des symboles en parallèle). Les fichiers objet de Go 1.15 sont légèrement plus volumineux que leurs équivalents 1.14.

Ces modifications font partie d'un projet multiversion visant à moderniser l'éditeur de liens Go, ce qui signifie que des améliorations supplémentaires de l'éditeur de liens seront attendues dans les versions futures.

L'éditeur de liens utilise maintenant par défaut le mode de liaison interne pour -buildmode= pie sur linux/amd64 et linux/arm64, donc ces configurations ne nécessitent plus d'éditeur de liens C.

Vet

Nouvel avertissement pour la string(x)

L'outil Vet avertit maintenant des conversions de forme string(x) où x a un type entier autre que rune ou byte. L'expérience avec Go a montré que de nombreuses conversions de cette forme supposent à tort que string(x) correspond à la représentation sous forme de chaîne de l'entier x. Il évalue en fait une chaîne contenant le codage UTF-8 de la valeur de x. Par exemple, string (9786) ne correspond pas à la chaîne "9786"; il évalue la chaîne "\xe2\x98\xba", ou "☺"

Le code qui utilise correctement string(x) peut être réécrit en string (rune (x)). Ou, dans certains cas, appeler utf8.EncodeRune (buf, x). Un autre code devrait très probablement utiliser strconv.Itoa ou fmt.Sprint.

Ce nouveau contrôle Vet est activé par défaut lors de l'utilisation de go test.

L'équipe envisage d'interdire la conversion dans une future version de Go. Autrement dit, le langage changerait pour autoriser uniquement string(x) pour l'entier x lorsque le type de x est rune ou byte. Un tel changement de langage ne serait pas rétrocompatible. L'équipe passe par ce contrôle Vet comme première étape d'essai pour changer le langage.

Nouvel avertissement pour les conversions d'interface impossibles

L'outil Vet avertit désormais des assertions de type d'un type d'interface à un autre type d'interface lorsque l'assertion de type échoue toujours. Cela se produira si les deux types d'interfaces implémentent une méthode avec le même nom, mais avec une signature de type différente.

Il n'y a aucune raison d'écrire une assertion de type qui échoue toujours, donc tout code qui déclenche cette vérification Vet doit être réécrit.

Ce nouveau contrôle Vet est activé par défaut lors de l'utilisation de go test.

Encore une fois, l'équipe envisage d'interdire les assertions de type d'interface impossibles dans une future version de Go. Un tel changement de langage ne serait pas rétrocompatible. Ce contrôle Vet fait donc lui aussi figure de première étape d'essai pour changer le langage.

Télécharger Go 1.15

Source : note de version

Une erreur dans cette actualité ? Signalez-le nous !