Aller Ă  la version 1.22

La version du langage de programmation Go 1.22 est présentée, développée par Google avec la participation de la communauté en tant que solution hybride combinant les hautes performances des langages compilés avec des avantages des langages de script tels que la facilité d'écriture de code. , rapidité de développement et protection contre les erreurs. Le code du projet est distribué sous licence BSD.

La syntaxe de Go est basée sur des é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. Le code Go est compilé en fichiers exécutables binaires autonomes qui s'exécutent de maniÚre native, sans utiliser de machine virtuelle (les modules de profilage, de débogage et d'autres sous-systÚmes d'identification des problÚmes au moment de l'exécution sont intégrés en tant que composants d'exécution), ce qui permet des performances comparables à celles des programmes C.

Le projet est initialement dĂ©veloppĂ© dans l'optique d'une programmation multithread et d'un fonctionnement efficace sur des systĂšmes multicƓurs, notamment en fournissant des moyens au niveau opĂ©rateur pour organiser le calcul parallĂšle et l'interaction entre les mĂ©thodes exĂ©cutĂ©es en parallĂšle. Le langage offre Ă©galement une protection intĂ©grĂ©e contre les blocs de mĂ©moire surallouĂ©s et offre la possibilitĂ© d'utiliser un garbage collector.

Parmi les changements de la nouvelle version :

  • La prise en charge de la dĂ©finition de plages d'entiers a Ă©tĂ© ajoutĂ©e aux boucles « for », par exemple, pour parcourir les valeurs de 0 Ă  9, vous pouvez dĂ©sormais utiliser la boucle « for i := range 10 {...} ».
  • Ajout de la prise en charge expĂ©rimentale (GOEXPERIMENT=rangefunc) des fonctions de plage dans les boucles for, vous permettant de spĂ©cifier une fonction comme itĂ©rateur. Par exemple, "pour i, x := range slices.Backward(s) {...}"
  • RĂ©solution d'un problĂšme de longue date avec les boucles for qui entraĂźnait des appels aux coroutines (goroutines) pour partager des variables de boucle entre les itĂ©rations. Par exemple, les valeurs de code := []string{"a", "b", "c"} pour _, v := range values ​​​​{ go func() { fmt.Println(v) done < - true }() } affichera dĂ©sormais "a", "b" et "c", et pas seulement "c", comme c'Ă©tait le cas auparavant.
  • La gestion de la mĂ©moire pendant l'exĂ©cution a Ă©tĂ© optimisĂ©e, ce qui a entraĂźnĂ© une augmentation des performances de 1 Ă  3 % et une rĂ©duction de la consommation de mĂ©moire dans la plupart des applications de 1 %.
  • Les travaux se sont poursuivis pour inclure des optimisations dans le compilateur basĂ©es sur les rĂ©sultats du profilage de code (PGO - Profile-guided enhancement), qui permettent de prendre en compte les fonctionnalitĂ©s dĂ©terminĂ©es lors de l'exĂ©cution du programme. Dans la nouvelle version, le compilateur utilise des outils de dĂ©virtualisation pour remplacer les appels indirects de diverses mĂ©thodes par l'exĂ©cution de blocs en ligne Ă©tendus.
  • Lorsque PGO a Ă©tĂ© activĂ©, le changement ajoutĂ© a amĂ©liorĂ© les performances de la plupart des programmes de 2 Ă  14 %.
  • Une implĂ©mentation expĂ©rimentale amĂ©liorĂ©e (GOEXPERIMENT=newinliner) du mĂ©canisme d'inlining d'appel a Ă©tĂ© ajoutĂ©e au compilateur, utilisant des heuristiques pour sĂ©parer les opĂ©rations importantes et sans importance.
  • Le package « math/rand/v2 » a Ă©tĂ© ajoutĂ© Ă  la bibliothĂšque standard, qui offre une API plus holistique et utilise des algorithmes plus rapides pour gĂ©nĂ©rer des nombres pseudo-alĂ©atoires.
  • Le package net/http.ServeMux a ajoutĂ© la possibilitĂ© de spĂ©cifier des mĂ©thodes et des masques dans les modĂšles, par exemple, le modĂšle « GET /static/{id}/ » sera appliquĂ© aux requĂȘtes avec la mĂ©thode HTTP « GET » et stockera le valeur du deuxiĂšme segment du chemin demandĂ© dans l'identifiant « id".
  • Le package database/sql a ajoutĂ© la prise en charge du type Null[T], vous permettant d'analyser les colonnes qui peuvent ĂȘtre NULL. Ajout de la fonction Concat au package slices pour fusionner plusieurs tranches de tout type.
  • Dans les commandes permettant de travailler avec des espaces de travail (collections de modules), il est possible d'utiliser le rĂ©pertoire « vendor Â», qui contient des dĂ©pendances au contenu de l'espace de travail. Le rĂ©pertoire est créé lors de l'exĂ©cution de la commande « go work seller » et est utilisĂ© dans les commandes de construction lorsque l'option « -mod=vendor » est dĂ©finie (activĂ©e par dĂ©faut s'il existe un rĂ©pertoire fournisseur).

Changements dans le comportement des services publics.

  • go get n'est plus pris en charge en dehors d'un module en mode GOPATH hĂ©ritĂ© (c'est-Ă -dire avec GO111MODULE=off). D'autres commandes de build, telles que go build et go test, continueront Ă  fonctionner indĂ©finiment pour les anciens programmes GOPATH.
  • go mod init ne tente plus d'importer les exigences du module Ă  partir des fichiers de configuration pour les outils d'autres fournisseurs (tels que Gopkg.lock).
  • go test -cover imprime dĂ©sormais les rĂ©sumĂ©s de couverture pour les packages couverts qui n'ont pas leurs propres fichiers de test. Avant Go 1.22, un rapport de test et de couverture serait-il disponible pour un tel package ? mymod/mypack [pas de fichiers de test]

    et maintenant, depuis Go 1.22, les fonctions d'un package sont considérées comme non couvertes : couverture mymod/mypack : 0.0 % des déclarations Remarque : si un package ne contient aucun code exécutable, nous ne pouvons pas signaler un pourcentage significatif de couverture ; pour de tels packages, go test continuera à signaler les fichiers de test manquants.

  • L'interface Web de l'outil de trace a Ă©tĂ© lĂ©gĂšrement mise Ă  jour dans le cadre du travail de prise en charge du nouveau traceur, corrigeant certains problĂšmes et amĂ©liorant la lisibilitĂ© de diverses pages. L'interface Web prend dĂ©sormais en charge l'exploration des traces dans une vue thread-safe. La visionneuse de traces affiche dĂ©sormais Ă©galement la durĂ©e complĂšte de tous les appels systĂšme. Ces amĂ©liorations s'appliquent uniquement Ă  l'affichage des traces produites par les programmes construits sur Go 1.22 ou version ultĂ©rieure. Une prochaine version apportera certaines de ces amĂ©liorations aux traces produites par l’ancienne version de Go.
  • Le runtime stocke dĂ©sormais les mĂ©tadonnĂ©es de garbage collection basĂ©es sur le type plus prĂšs de chaque objet de tas. Ce changement rĂ©duit Ă©galement la surcharge de mĂ©moire de la plupart des programmes Go d'environ 1 % en dĂ©dupliquant les mĂ©tadonnĂ©es redondantes. Dans certains programmes, l'amĂ©lioration peut ĂȘtre moindre car cette modification ajuste les limites de classe de taille de l'allocateur de mĂ©moire, de sorte que certains objets peuvent ĂȘtre dĂ©placĂ©s vers une classe de taille supĂ©rieure. L'effet de ce changement est que les adresses de certains objets qui Ă©taient auparavant toujours alignĂ©es sur une limite de 16 octets (ou plus) ne seront dĂ©sormais alignĂ©es que sur une limite de 8 octets. Certains programmes qui utilisent des instructions d'assemblage qui nĂ©cessitent que les adresses mĂ©moire soient alignĂ©es sur 8 octets et s'appuient sur le comportement d'alignement prĂ©cĂ©dent de l'allocateur de mĂ©moire peuvent Ă©chouer, mais nous nous attendons Ă  ce que de tels programmes soient rares. De tels programmes peuvent ĂȘtre construits avec GOEXPERIMENT=noallocheaders avec la possibilitĂ© de revenir Ă  l'ancien modĂšle de mĂ©tadonnĂ©es et de restaurer le comportement d'alignement prĂ©cĂ©dent, mais les propriĂ©taires de packages doivent mettre Ă  jour leur code assembleur pour Ă©viter l'hypothĂšse d'alignement, car cette solution de contournement sera supprimĂ©e dans une version ultĂ©rieure. .
  • Comme mentionnĂ© dans les notes de version de Go 1.20, Go 1.22 nĂ©cessite dĂ©sormais la version finale de Go 1.20 ou une version ultĂ©rieure pour les versions initiales. Nous nous attendons Ă  ce que Go 1.24 nĂ©cessite la version finale de Go 1.22 ou une version ultĂ©rieure pour la construction initiale.
    Original (go.dev)

Source: linux.org.ru

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster