La version de production de Go 1.15, le langage open source statiquement typé et compilé de Google, a été livrée le 11 août. L’essentiel des améliorations de cette version concerne le compilateur qui produit des binaires de plus petite taille, le runtime, et l'éditeur de liens ou linker. Par rapport à la version Go 1.14 précédente, la taille des binaires de Go 1.15 a été réduite d'environ 5% grâce en particulier à la suppression de certains types de métadonnées dans la collecte de déchets et une élimination plus radicale des métadonnées de type inutilisées.
Par ailleurs, la chaîne d’outils du compilateur atténue désormais l’erreur du processeur Intel SKX102 sur GOARCH=amd64 par un alignement des fonctions sur des limites de 32 octets et en insérant des espaces libres (« padding ») dans les instructions de saut. Même si le padding augmente la taille des binaires, cet accroissement est plus que compensé par les améliorations de la taille des binaires dans cette version. Par ailleurs, Go 1.15 ajoute un drapeau -spectre au compilateur et à l'assembleur en vue d'atténuer la vulnérabilité du processeur Spectre, même si l'équipe de Go déclare que cela ne devrait jamais être nécessaire.
Le compilateur de Go 1.15 rejette également les directives //go : du compilateur qui n'ont aucune signification pour les déclarations auxquelles elles sont appliquées, signalant une erreur « misplaced compiler directive ». Ces directives mal orthographiées étaient auparavant enfreintes, mais étaient ignorées par le compilateur.
Les autres améliorations
Parmi les autres améliorations apportées à Go 1.15, basées sur les notes de version, on peut citer :
- Le journal d'optimisation -json du compilateur signale désormais quand les copies sont supérieures ou égales à 128 octets, et il fournit des explications sur les décisions d'analyse d'échappement.
- Concernant le runtime, l'allocation de petits objets est désormais plus performante à des nombres élevés et la latence reste plus faible dans le pire des cas. En outre, les réceptions de données non-bloquantes sur les canaux fermés sont désormais aussi performantes que les réceptions de données non-bloquantes sur les canaux ouverts.
- Des améliorations substantielles ont été apportées au linker Go, avec pour effet une réduction de l'utilisation des ressources du linker. Pour un ensemble représentatif de grands programmes Go, la liaison était 20 % plus rapide et utilisait en moyenne 30 % de mémoire en moins, pour les systèmes d'exploitation basés sur ELF sur des architectures AMD64, avec des améliorations plus modestes pour d'autres améliorations d'architecture/OS. Cette amélioration des performances de l'éditeur de liens est essentiellement due au nouveau design du format de fichier objet et à la réorganisation des phases internes pour booster la concurrence.
- Avec la commande Go, l'environnement GOPROXY permet désormais d’ignorer les proxies qui renvoient des erreurs. Il est maintenant possible de séparer les URL de proxy par des virgules ou des caractères « pipe ». De plus, divers problèmes de parsing de flag dans go test et go vet ont été corrigés.
- La bibliothèque principale inclut désormais un paquet time/tzdat, qui permet d'intégrer le fuseau horaire de la base de données dans un programme.
- L'outil vet prévient désormais des conversions de la chaîne de caractères (x), où « x » a un type d'entier autre que rune ou byte. L'outil vet avertit également en cas d’assertions de type d’un type d'interface à un autre type d'interface quand l'assertion de type échoue de manière permanente.
- Le traitement du champ CommonName sur les certificats X.509 comme nom d'hôte en l’absence de Subject Alternative Names est désormais désactivé par défaut.
Les instructions pour télécharger la release Go 1.15 sont disponibles sur golang.org.