Prévue pour le mois d'août, la prochaine mise à jour de Go, le langage de programmation développé par Google, introduit un autre modèle de mémoire et de nouveaux types qui facilitent l’usage de valeurs atomiques. Plus précisément, le modèle de mémoire du langage a été révisé pour aligner le langage Go sur le modèle de mémoire utilisé par les langages C, C++, Java, JavaScript et Swift, selon les notes de version. Go 1.19 propose également de nouveaux types dans le package sync/atomic qui facilitent l’usage de valeurs atomiques comme atomic.int64 et atomic.Pointer(T).

Le modèle mémoire de Go spécifie les conditions sous lesquelles les lectures d'une variable dans une goroutine peuvent être garanties pour observer les valeurs produites par les écritures de la même variable dans une goroutine différente. Go ne fournit que des atomiques cohérents de manière séquentielle, et aucune des formes plus détendues proposées par d'autres langages. Go 1.19 introduit un autre « petit » changement dans le langage, à savoir une correction de la portée des paramètres de type dans les déclarations de méthodes. Les programmes existants ne sont pas affectés.

Le support d'une limite de mémoire flexible inclus au runtime

La version 1.19 de Go fait suite à la version 1.18 sortie en mars, qui apportait des fonctionnalités génériques attendues de longue date. Actuellement en bêta, la version 1.19 de Go, encore considérée comme instable, est téléchargeable sur go.dev. Parmi les autres fonctionnalités et améliorations de Go 1.19, on peut citer :

- Le runtime inclut désormais le support d'une limite de mémoire flexible. Cette limite inclut le tas de Go et les autres mémoires gérées par le runtime et exclut les sources de mémoire externes comme que les mappings de binaire, la mémoire gérée dans d'autres langages et la mémoire détenue par le système d'exploitation pour le compte du programme Go. De plus, le runtime planifie dorénavant moins de routines de travail du GC (Garbage Collector) sur les threads OS inactifs quand l'application est suffisamment inactive pour forcer un cycle GC périodique ;

- Le compilateur utilise maintenant une table de saut pour implémenter les instructions de commutation de grands entiers et de chaînes de caractères. Les améliorations de performance pour l'instruction switch sont variables, mais peuvent être jusqu’à 20% plus rapides ;

- Cette version prend en charge les liens, les listes et les titres plus clairs dans les commentaires de la documentation ;

- La contrainte build, unix, est désormais reconnue dans les lignes //go:build ;

- Le support de l'architecture 64 bits LoongArch de Loongson sur Linux a été ajouté.