3 points par lemonmint 2024-12-20 | 4 commentaires | Partager sur WhatsApp

[IMG] Overview of Go 1.24

La version Go 1.24 s’annonce comme une release majeure, avec de nombreuses améliorations axées sur les performances, la sécurité et l’expérience développeur. Ces changements visent à rendre Go encore plus puissant et plus efficace pour construire des applications modernes.

Améliorations des performances

Des gains de performance généraux ont permis de réduire la surcharge CPU de 2 à 3 % sur une suite de benchmarks représentative. Ces améliorations incluent une nouvelle implémentation intégrée de map, une allocation mémoire plus efficace pour les petits objets, ainsi qu’une nouvelle implémentation interne des mutex du runtime. Les résultats peuvent varier selon les applications.

Cryptographie résistante au quantique

Le package crypto/mlkem, qui implémente ML-KEM-768 et ML-KEM-1024, a été introduit. ML-KEM, auparavant connu sous le nom de Kyber, est un mécanisme d’échange de clés résistant au quantique défini dans la norme FIPS 203. Cet ajout permet à Go de mieux se préparer aux futurs enjeux de sécurité cryptographique.

Client Hello chiffré

La prise en charge d’ECH (Encrypted Client Hello) dans TLS est désormais disponible. Cette fonctionnalité peut être activée en renseignant le champ Config.EncryptedClientHelloKeys, ce qui renforce la confidentialité et la sécurité des connexions TLS.

Nouvelle Swiss Table Map

Une implémentation améliorée de map pour de meilleures performances. Cette nouvelle implémentation repose sur les Swiss Tables et peut être désactivée avec le flag de build GOEXPERIMENT=noswissmap.

Mise à jour de Sync Map

Les performances de modification des maps dans sync.Map ont été améliorées. Les modifications sur des ensembles de clés disjoints sont désormais bien moins susceptibles d’entrer en contention sur de grandes maps, et le temps de préparation auparavant nécessaire pour obtenir une faible contention n’est plus requis. En cas de problème, il est possible de revenir à l’implémentation précédente avec GOEXPERIMENT=nosynchashtriemap.

Amélioration du marshaling JSON

Une nouvelle option de tag omitempty permet d’omettre plus intelligemment les champs de structures lors du marshaling JSON. Lors du marshaling, si la valeur d’un champ de structure portant l’option omitempty est nulle ou zéro, il est omis. Si le type du champ possède une méthode IsZero() bool, celle-ci est utilisée pour déterminer si la valeur est nulle ou zéro.

Nettoyage du runtime

La fonction AddCleanup, destinée à remplacer SetFinalizer, a été introduite pour améliorer la gestion des ressources. Contrairement à SetFinalizer, elle ne ressuscite pas l’objet associé pour la finalisation et permet d’attacher plusieurs nettoyages à un même objet. Le nouveau code devrait privilégier AddCleanup à SetFinalizer.

Directive tool dans go.mod

Le suivi des dépendances d’outils a été amélioré grâce à la directive tool dans go.mod. Cela évite d’avoir recours à l’ancien contournement consistant à ajouter les outils par import vide dans un fichier portant conventionnellement le nom de "tools.go".

Accès limité aux répertoires

Un nouveau type os.Root est introduit pour effectuer des opérations contrôlées sur le système de fichiers. Le type os.Root permet d’exécuter des opérations sur les fichiers uniquement dans un répertoire donné, empêchant ainsi tout accès en dehors du chemin spécifié.

Améliorations des tests

Le nouveau package testing/synctest est destiné aux tests de code concurrent. La fonction synctest.Run lance un groupe de goroutines dans une « bulle » isolée, et la fonction synctest.Wait attend que toutes les goroutines de la bulle en cours soient bloquées. Ce package est expérimental et doit être activé au moment de la compilation avec GOEXPERIMENT=synctest.

Cache de build

Les exécutables de go run sont désormais mis en cache pour permettre une exécution plus rapide. Cela accélère les exécutions répétées, au prix d’un cache plus volumineux.

Performances de Cgo

De nouvelles annotations #cgo noescape et #cgo nocallback ont été ajoutées pour améliorer les performances de Cgo. #cgo noescape cFunctionName indique au compilateur que la mémoire transmise à la fonction C ne s’échappe pas. #cgo nocallback cFunctionName indique au compilateur que la fonction C ne rappellera pas de fonction Go.

Pointeurs faibles

La prise en charge des pointeurs faibles permet de référencer la mémoire de manière sûre sans empêcher sa récupération. Les pointeurs faibles constituent un mécanisme bas niveau destiné à créer des structures économes en mémoire, comme des maps faibles pour l’association de valeurs, des maps de canonicalisation et différents types de caches.

Améliorations des benchmarks

La nouvelle méthode testing.B.Loop permet d’écrire des benchmarks plus rapides et moins sujets aux erreurs. Les fonctions de benchmark ne sont exécutées qu’une seule fois par -count, ce qui permet de n’exécuter qu’une seule fois les étapes coûteuses de configuration et de nettoyage. Les paramètres d’appel de fonction et les résultats sont conservés, empêchant ainsi le compilateur d’optimiser complètement le corps de la boucle.

La version Go 1.24 s’annonce comme une release importante, apportant des améliorations significatives à de nombreux aspects du langage et de son écosystème.

4 commentaires

 
secret3056 2024-12-20

Celles et ceux qui utilisent Go, y a-t-il des fonctionnalités que vous aimeriez voir arriver ?
Moi, j’aimerais bien avoir des opérateurs comme .? et ??, et si possible des macros.

Honnêtement, les struct tags sont une erreur.

 
gkswnsqja 2024-12-20

Personnellement, j’aimerais vraiment qu’il y ait des macros, s’il vous plaît. Jusqu’à quand faudra-t-il continuer à faire du generate ? snif

 
qkrqjadn 2024-12-20

Je me demande pourquoi les struct tags sont considérés comme une erreur.

 
secret3056 2024-12-20

Le plus gros problème, c’est qu’il est difficile de bénéficier de l’aide des outils.

  • Comme c’est une chaîne de caractères, même s’il y a une faute de frappe, il est difficile de repérer l’erreur.
  • À part pour le JSON, il n’y a ni autocomplétion ni IntelliSense.
  • Quand on utilise plusieurs outils, on est obligé de tout écrire sur une seule ligne, et il est difficile d’éviter une impression de faible lisibilité.

gomodifytags existe aussi depuis longtemps, mais son intégration avec l’extension Go de VSC a également été assez tardive.