Accueil Astuces et Informations Go 1.20 arrive avec une prise en charge expérimentale de PGO, des...

Go 1.20 arrive avec une prise en charge expérimentale de PGO, des améliorations et plus encore

3
1
Goland

Go est un langage de programmation concurrent compilé avec un typage statique inspiré de la syntaxe C.

Il a été fait connaître sortie de la nouvelle version du langage de programmation Go 1.20, qui est développé par Google avec la participation de la communauté comme une solution hybride qui combine les hautes performances des langages compilés.

La nouvelle édition de Go 1.20 a bénéficié d’une phase de développement prolongéerendu possible grâce aux tests approfondis ci-dessus et à l’amélioration globale de la stabilité de la base de code.

Il convient de mentionner que le projet est initialement développé dans l’optique d’une programmation multithread et d’un fonctionnement efficace sur des systèmes multicœurs, y compris la fourniture de moyens implémentés par l’opérateur pour organiser le calcul parallèle et l’interaction entre les méthodes exécutées en parallèle. Le langage fournit également une protection intégrée contre les débordements de blocs de mémoire alloués et offre la possibilité d’utiliser le ramasse-miettes.

La syntaxe de Go est basée sur les éléments familiers du langage C avec quelques emprunts au langage Oberon. Le langage est assez concis, mais le code est facile à lire et à comprendre.

Principales nouveautés de Go 1.20

Dans cette nouvelle version de Go 1.20 qui est présentée, il est souligné qu’elle a fournio support expérimental pour l’optimisation guidée par profil (PGO), qui tient compte des caractéristiques déterminées à l’exécution. En tenant compte du profil d’exécution lors de l’assemblage, les performances des applications peuvent être améliorées de 3 à 4 %. Ajout de l’option “-pgo” pour inclure PGO dans go build, go install et d’autres commandes de build.

Une autre nouveauté qui est présentée est que ajout des fonctions SliceData, String et StringData au package unsafe pour les manipulations de bas niveau avec des segments (tableaux dimensionnés dynamiquement) et des chaînes (par exemple, pour convertir une zone mémoire pointée par un pointeur vers une chaîne de type chaîne et vice versa).

En plus de cela, il est également souligné que la couverture a été étendue avec la possibilité de collecter des profils pour les programmes en général et pas seulement pour les tests unitaires, l’option “-cover” a également été ajoutée pour aller à la compilation, à l’installation et à d’autres commandes construire pour générer un profil de couverture.

Utilitaire go est libéré de la liaison aux packages de bibliothèques standard précompilés situé dans le répertoire $GOROOT/pkg, ce qui a permis de les exclure de la distribution et d’obtenir une réduction de la taille des données téléchargées. Les packages de bibliothèque standard, comme les packages réguliers, sont désormais créés selon les besoins et mis en cache dans le cache de construction.

La commande go désactive l’utilisation du package cgo par défaut sur des systèmes sans ensemble d’outils pour compiler du code C. Ces systèmes utilisent désormais des variantes des packages de bibliothèque standard dans le langage Go, plutôt que d’utiliser des packages précompilés.

Des autres changements notables de la nouvelle version :

  • L’utilitaire vet a des avertissements supplémentaires sur les problèmes avec les variables utilisées dans les boucles qui sont détectées lorsque les tests s’exécutent en parallèle.
  • Les règles de conversion de type sont étendues avec la possibilité de conversion directe d’un segment en tableau.
  • La spécification définit explicitement l’ordre dans lequel les éléments de tableau et les champs de structure sont comparés.
  • Le package crypto/ecdh a été ajouté à la bibliothèque standard avec prise en charge de l’échange de clés ECDH (Elliptic Curve Diffie-Hellmann).
  • Ajout d’un nouveau type http.ResponseController pour créer des contrôleurs de réponse HTTP riches.
  • Ajout de la fonction Rewrite au type httputil.ReverseProxy pour modifier la requête.
  • Ajout de la fonction context.WithCancelCause, qui vous permet d’annuler l’appel avec une erreur spécifiée.
  • Les champs Cancel et WaitDelay ont été ajoutés au type os/exec.Cmd pour spécifier le comportement lorsque le contexte est annulé ou que le processus est terminé.
  • Dans le compilateur et le garbage collector, la consommation de mémoire a été réduite et les performances ont été optimisées (l’augmentation de la vitesse atteint 2%).
  • Un travail a été fait pour accélérer la compilation : une réduction du temps de compilation peut aller jusqu’à 10 %.
  • Ajout du support expérimental de la plate-forme FreeBSD sur les systèmes avec architecture RISC-V (GOOS=freebsd, GOARCH=riscv64).

Finalement Si vous souhaitez en savoir plus, Vous pouvez vérifier les détails dans le lien suivant.