9 points par lemonmint 2025-08-13 | Aucun commentaire pour le moment. | Partager sur WhatsApp

[IMG] Overview

La version Go 1.25 est officiellement disponible. Cette version inclut des améliorations dans les outils, le runtime, le compilateur et l’ensemble de la bibliothèque standard, et met notamment en avant d’importantes fonctionnalités expérimentales que les utilisateurs peuvent tester à l’avance et pour lesquelles ils peuvent faire des retours.

  • Principales caractéristiques :
    • Maintien de la compatibilité avec la version Go 1
    • Améliorations étendues des outils, du runtime, du compilateur et des bibliothèques
    • Introduction de nouvelles fonctionnalités expérimentales (GreenTea GC, package json/v2)

Fonctionnalités expérimentales clés

Go 1.25 comprend deux grandes fonctionnalités expérimentales visant à améliorer les performances et les capacités du langage, que les utilisateurs peuvent activer via des variables d’environnement.

Nouveau ramasse-miettes GreenTea (GC)

Son objectif est d’améliorer les performances en réduisant la surcharge du GC lors du traitement d’un grand nombre de petits objets.

  • Fonctionnement : les petits objets de moins de 512 octets sont regroupés pour le GC par unités de « memory spans » de 8 KiB. Cela améliore la localité mémoire et maximise l’efficacité du cache CPU.
  • Effets attendus :
    • Amélioration des performances du GC grâce à la réduction du coût des sauts mémoire
    • Fonctionnement efficace dans les environnements multicœurs
    • Réduction de la surcharge d’allocation des petits objets et de la fragmentation mémoire
  • Activation : définir la variable d’environnement GOEXPERIMENT=greenteagc lors de la compilation
Nouveau package encoding/json/v2

Il s’agit d’une nouvelle implémentation JSON conçue pour corriger le manque de cohérence, les comportements peu prévisibles et les problèmes de performances de encoding/json (v1).

  • Objectifs principaux :

    • Améliorer l’exactitude et la prévisibilité : des règles plus strictes sont appliquées par défaut (par ex. respect de la casse, interdiction des clés dupliquées) afin de réduire les comportements inattendus.
    • Améliorer les performances : les moteurs de parsing et d’encodage ont été repensés pour gagner en efficacité.
    • Accroître la flexibilité et le contrôle : un système d’options avancé permet aux développeurs de contrôler finement le traitement du JSON.
  • Principaux changements (v2 par rapport à v1) :

    • Correspondance des noms de champs : contrairement à l’approche insensible à la casse de v1, v2 fait la distinction exacte entre majuscules et minuscules par défaut.
    • Changement de sens du tag omitempty : alors que v1 omettait selon l’« état vide » de la valeur Go (0, false, nil, etc.), v2 omet selon l’« état vide » de la valeur JSON encodée (null, "", {}, []).
    • Traitement des slices et maps nil : v1 les sérialisait en null, tandis que v2 les sérialise par défaut respectivement en [] (tableau vide) et {} (objet vide).
    • Désérialisation des tableaux : v1 tolérait que la longueur du tableau JSON et celle du tableau Go diffèrent, mais v2 exige qu’elles correspondent exactement, sinon une erreur est renvoyée.
    • Gestion des clés dupliquées : v1 acceptait les clés dupliquées (en écrasant avec la dernière valeur), tandis que v2 renvoie une erreur par défaut, ce qui renforce l’exactitude et la sécurité.
    • Gestion de l’UTF-8 invalide : v1 remplaçait automatiquement les caractères UTF-8 invalides (\uFFFD), tandis que v2 renvoie une erreur par défaut afin d’éviter toute corruption de données.
  • Nouvelles fonctionnalités et structure :

    • Structure modulaire : l’analyse syntaxique bas niveau (package jsontext) est séparée de la transformation sémantique haut niveau (package json/v2), ce qui améliore la clarté du code et les performances.
    • Système d’options puissant : json.Options permet de contrôler finement divers comportements, et il est même possible de reproduire entièrement le comportement de v1.
    • Traitement des types externes : les options WithMarshalers et WithUnmarshalers permettent d’injecter une logique de sérialisation/désérialisation pour des types de packages externes qui n’implémentent pas les interfaces Marshaler/Unmarshaler.
  • Activation : définir la variable d’environnement GOEXPERIMENT=jsonv2 lors de la compilation

Principaux changements et améliorations

Cette version apporte aussi de nombreuses améliorations destinées à accroître la productivité des développeurs et l’efficacité d’exécution des programmes.

  • Runtime

    • GOMAXPROCS conscient de l’environnement conteneurisé : sous Linux, les limites CPU des cgroups sont automatiquement détectées pour définir la valeur par défaut de GOMAXPROCS, avec mise à jour dynamique en cas de changement des ressources CPU.
    • Trace Flight Recorder : une fonctionnalité de traçage légère qui enregistre en continu les traces du runtime dans un buffer circulaire en mémoire pour aider au débogage de bugs rares.
  • Outils et compilateur

    • Correction d’un bug de pointeur nil : un bug du compilateur présent depuis Go 1.21, qui retardait la vérification des pointeurs nil, a été corrigé ; du code qui réussissait anormalement provoque désormais correctement une panique.
    • Prise en charge de DWARF5 : utilisation de la version 5 de DWARF pour les informations de débogage, afin de réduire la taille des binaires et le temps d’édition de liens.
    • Nouvelle directive go.mod ignore : elle permet à la commande go d’ignorer certains répertoires.
  • Bibliothèque standard

    • Ajout du package testing/synctest : un nouveau package pour tester le code concurrent, permettant d’exécuter les tests de façon isolée dans un temps virtualisé.
    • Amélioration des performances du package crypto : en mode FIPS, la vitesse de signature de ecdsa et ed25519 est multipliée par 4, et les performances de hachage SHA ont aussi été améliorées.
    • Ajout de net/http CrossOriginProtection : une nouvelle fonctionnalité qui utilise les métadonnées Fetch des navigateurs modernes pour se protéger contre les attaques CSRF.

Changements de ports et de support

  • macOS : à partir de Go 1.25, macOS 12 Monterey ou version ultérieure est requis.
  • Windows : le port 32 bits windows/arm cessera d’être pris en charge après cette version.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.