Go 1.7 débarque avec une optimisation de son compilateur
Permettant de réduire jusqu'à 35 % l'utilisation du CPU

Le , par Stéphane le calme, Chroniqueur Actualités
Six mois après la sortie de la version 1.6, Google a annoncé la disponibilité de la version 1.7 de Go. La plupart des changements qui accompagnent cette mouture sont situés au niveau de la chaîne de compilation, l’environnement d’exécution et les bibliothèques.

En 2015, suite à une proposition, Keith Rendal de Google a annoncé que l’entreprise comptait traduire le code du compilateur en Go. Pour y parvenir, Google a segmenté ce processus en trois étapes, en commençant par le back end, afin de pouvoir se focaliser sur des portions qui pourront être testées et déployées plus facilement.

La première étape consiste à convertir le compilateur back end en SSA (Static Single Assignment form, une méthode d'optimisation pour la compilation), ce qui est chose faite avec cette version. Les apports prévus par Google ? Entre autres une meilleure suppression du code mort, une meilleure allocation des registres et de la mémoire. Google estime que le nouveau code back end du compilateur permet de réduire l’utilisation du CPU de l’ordre de 5 à 35 % d’après son benchmark. Toutefois, il faut noter que ce code peut être désactivé en passant -ssa=0 au compilateur.

Toujours concernant le compilateur, Google indique que le format de métadonnées exportées écrit par le compilateur dans les archives de package a changé: l'ancien format textuel a été remplacé par un format binaire plus compact qui permet d’obtenir de plus petites archives de paquets tout en corrigeant au passage quelques bogues. Ici encore le nouveau format peut être désactivé en passant -newexport=0 au compilateur.

Les erreurs d'exécution telles que la tentative d'indexation d’un tableau hors limites déclenchent un RUN-TIME PANIC, qui est équivalent à effectuer un appel de la fonction intégrée PANIC avec une valeur de l'interface type runtime.Error. Ce type satisfait l’interface type prédéclarée ERROR. Les valeurs d'erreur exactes qui représentent des conditions d'erreur d'exécution distinctes ne sont pas précisées. Avec Go 1.7, les RUN-TIME PANIC se servent de valeurs qui implémentent à la fois Error et runtime.Error.

Dans l’environnement d’exécution, Go 1.7 apporte une nouvelle fonction, KeepAlive, qui fournit un mécanisme explicite pour déclarer qu’un objet alloué doit être considéré comme accessible à un moment donné dans un programme, généralement pour retarder l'exécution d'un finaliseur associé.

La nouvelle fonction CallersFrames traduit des données obtenues depuis Callers en une séquence d'images correspondant à la pile d'appels. Google recommande cette nouvelle API en lieu et place de l'utilisation directe de FuncForPC, étant donné que la séquence d'images peut décrire plus précisément les piles d'appels.

La nouvelle fonction SetCgoTraceback pour sa part facilite une intégration plus étroite entre l’exécution de code Go et C dans le même processus appelé en utilisant cgo.

Du côté des bibliothèques, de nombreux changements mineurs ont été opérés. Nous pouvons citer par exemple crypto/tls. L’implémentation de TLS envoie les premiers paquets de données sur chaque connexion à l'aide d’enregistrements de petite taille, augmentant progressivement la taille d’enregistrement maximale TLS. Cette heuristique réduit la quantité de données qui doivent être reçues avant que le premier paquet ne soit déchiffré, ce qui permet d’améliorer la latence de communication sur les réseaux à faible bande passante.

Jusqu’à Go 1.6, définir le champ DynamicRecordSizingDisabled sur True permettait d’avoir des paquets aussi larges que possible en début de connexion. Cette fois-ci, le client TLS dispose désormais d’un support limité et optionnel pour renégocier la taille des paquets envoyés aux serveurs via le champ Renegociation. Google explique que cela est nécessaire pour de nombreux serveurs Microsoft Azure.

De plus, les erreurs renvoyées par le package commencent désormais systématiquement par un préfixe “tls :”. Dans les versions précédentes, certaines erreurs se servaient du préfixe “crypto / tls: “, d’autres utilisaient le préfixe “tls: “ et certains n’avaient aucun préfixe du tout.

Concernant les autres changements, Go 1.7 ajoute de nombreux supports comme celui de macOS 10.12 Sierra, ou l’ajout d’un port expérimental Linux sur z System (linux/s390x), une gamme d’ordinateurs conçue par IBM pour ses mainframes.

Source : note de version


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de bbalet bbalet - Membre actif https://www.developpez.com
le 25/08/2016 à 14:40
Le patronyme du ggogler est keith randall
Contacter le responsable de la rubrique Accueil