Grâce aux améliorations apportées à son compilateur, Go 1.15, la prochaine version du langage open source de Google, statiquement typé et compilé pourra produire des binaires réduites. Le runtime et le linker ont également été améliorés. Par rapport à la version 1.14, la taille des binaires de la version 1.15, dont la release de production est attendue en août, seront réduites d'environ 5%. Cette réduction est obtenue par élimination de certains types de métadonnées dans la collecte des déchets et une élimination plus radicale des métadonnées de type inutilisées.
Une autre amélioration dans la chaîne d'outils du compilateur permet désormais d’atténuer l'erratum du processeur Intel SKX102 sur GOARCH=amd64 en alignant les 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 de taille est plus que compensé par les améliorations de la taille des binaires de la release. De plus, Go 1.15 ajoute un drapeau -spectre au compilateur et à l'assembleur pour permettre 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.
Les améliorations du compilateur
Désormais, 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 silencieusement par le compilateur.
Parmi les autres améliorations de Go 1.15 mentionnées dans 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.
Les instructions pour télécharger la version bêta de Go 1.15 sont disponibles sur golang.org.
Commentaire