Sortie du langage de programmation Go 1.18

La version du langage de programmation Go 1.18 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 Python. Le langage est assez concis, mais le code est facile à lire et à comprendre. Le code Go est compilé dans des 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 de détection des problèmes d'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.

La nouvelle version ajoute la prise en charge des fonctions et types génériques (génériques), à l'aide desquels un développeur peut définir et utiliser des fonctions conçues pour fonctionner avec plusieurs types à la fois. Il est également possible d'utiliser des interfaces pour créer des types combinés couvrant plusieurs types de données. La prise en charge des génériques est implémentée sans rompre la compatibilité ascendante avec le code existant. // Somme des valeurs définies, fonctionne pour les types int64 et float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Une autre option avec une définition de type générique : type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Autres améliorations :

  • Des utilitaires pour tester le code fuzzing sont intégrés dans la boîte à outils standard. Lors des tests de fuzzing, un flux de toutes les combinaisons aléatoires possibles de données d'entrée est généré et les échecs possibles lors de leur traitement sont enregistrés. Si une séquence plante ou ne correspond pas à la réponse attendue, ce comportement indique très probablement un bug ou une vulnérabilité.
  • Ajout de la prise en charge des espaces de travail multimodulaires, vous permettant d'exécuter des commandes sur plusieurs modules à la fois, vous permettant ainsi de créer et d'exécuter simultanément du code dans plusieurs modules.
  • Des optimisations significatives des performances ont été réalisées pour les systèmes basés sur les processeurs Apple M1, ARM64 et PowerPC64. Activation de la possibilité d'utiliser des registres au lieu de la pile pour transmettre des arguments aux fonctions et renvoyer le résultat. Amélioration du déroulement en ligne des boucles par le compilateur. La vérification de type dans le compilateur a été entièrement repensée. Certains tests montrent une augmentation de 20 % des performances du code par rapport à la version précédente, mais la compilation elle-même prend environ 15 % de plus.
  • Au moment de l'exécution, l'efficacité du retour de la mémoire libérée au système d'exploitation a été augmentée et le fonctionnement du garbage collector a été amélioré, dont le comportement est devenu plus prévisible.
  • De nouveaux packages net/netip et debug/buildinfo ont été ajoutés à la bibliothèque standard. La prise en charge de TLS 1.0 et 1.1 est désactivée par défaut dans le code client. Le module crypto/x509 a arrêté de traiter les certificats signés à l'aide du hachage SHA-1.
  • Les exigences pour l'environnement sous Linux ont été augmentées ; pour travailler, vous devez désormais disposer d'un noyau Linux d'au moins la version 2.6.32. Dans la prochaine version, des changements similaires sont attendus pour FreeBSD (le support de la branche FreeBSD 11.x sera interrompu) et au moins FreeBSD 12.2 sera requis pour fonctionner.

Source: opennet.ru

Ajouter un commentaire