IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Go 1.16 est disponible et apporte la prise en charge de l'architecture ARM 64 bits sur macOS,
Ainsi que l'intégration des fichiers statiques et des arborescences de fichiers dans l'exécutable final

Le , par Bruno

180PARTAGES

9  0 
Go est un langage de programmation open source, développé par Google, qui facilite le développement de logiciels simples, fiables et efficaces. En raison de sa simplicité, il est utilisé aussi bien pour développer des applications, écrire des scripts pour de grands systèmes. Cette simplicité est nécessaire aussi pour assurer la maintenance et l'évolution des programmes sur plusieurs générations de développeurs.

S'il vise aussi la rapidité d'exécution, indispensable à la programmation système, il considère le multithreading comme le moyen le plus robuste d'assurer sur les processeurs actuels, cette rapidité tout en rendant la maintenance facile par séparation de tâches simples exécutées indépendamment. Cette conception permet également le fonctionnement sans réécriture sur des architectures multicœurs en exploitant immédiatement l'augmentation de puissance correspondante.

Matt Pearring, responsable marketing et Dmitri Shuralyov, Ingénier logiciel chez Google ont annoncé la disponibilité de Go 1.16. Passons en revue quelques nouveautés et améliorations.


La prise en charge

Darwin et iOS : Go 1.16 apporte la prise en charge de l'architecture ARM 64 bits sur macOS avec GOOS=darwin, GOARCH= rm64. À l’exemple de la prise en charge de darwin/amd64, la prise en charge darwin/ arm64 prend en charge les modes cgo, en liaison interne et externe, c-archive, c-shared et pie. Le portage iOS, qui était auparavant darwin/arm64, a été renommé ios/arm64. GOOS=ios implique la balise de construction darwin, à l’exemple de GOOS=android qui implique la balise de construction linux. Selon Matt Pearring et Dmitri Shuralyov, ce changement devrait être transparent pour toute personne utilisant gomobile pour développer des applications iOS.

Go 1.16 ajoute un port ios/amd64, qui cible le simulateur iOS fonctionnant sur macOS basé sur AMD64. Auparavant, cela était pris en charge de manière non officielle via darwin/amd64 avec le jeu de balises de construction ios. Voir aussi misc/ios /README pour plus de détails sur la création de programmes pour iOS et le simulateur iOS.

NetBSD : Go prend désormais en charge l'architecture ARM 64 bits sur NetBSD et l'architecture MIPS64 sur OpenBSD. Pour assurer une compatibilité avec les futures versions d'OpenBSD, en particulier, OpenBSD 6.9 et les suivantes, les appels système sont maintenant effectués via libc sur les architectures 64-bit x86 et 64-bit ARM sous OpenBSD, au lieu d'utiliser directement l'instruction SYSCALL/SVC.

386 : comme annoncé dans les notes de version de Go 1.15, Go 1.16 supprime le support de la compilation en mode x87 (GO386=387). La prise en charge des processeurs non SSE2 est désormais disponible en utilisant le mode soft float (GO386=softfloat). Les responsables du développement de Go invitent les développeurs qui utilisent des processeurs non-SSE2 à remplacer GO386=387 par GO386=softfloat.

RISC-V : le portage de linux/riscv64 supporte désormais cgo et -buildmode=pie. Cette version inclut également des optimisations de performance et des améliorations de génération de code pour RISC-V.

Les outils avec Go 1.16

Cgo : l'outil cgo ne traduit plus les champs binaires des structures C en champs de structures Go, même si leur taille peut être représentée dans Go. L'ordre dans lequel les champs binaires C apparaissent en mémoire dépend de l'implémentation.

Vet : avec Go 1.16, l'outil vet avertit des appels erronés de la méthode testing.T. Il avertit également des appels aux méthodes Fatalf, FailNow et Skip{, f, Now} lors des tests testing.T ou testing.B. Les appels à ces méthodes arrêtent l'exécution de la routine go créée et non la fonction Test* ou Benchmark*. Ainsi, ces méthodes doivent donc être appelées par la routine go qui exécute la fonction de test ou de benchmark.

Go command : le mode "compatibilité avec les modules" est activé par défaut, que le fichier go.mod soit présent ou non dans le répertoire de travail courant ou dans un répertoire parent. Plus précisément, la variable d'environnement GO111MODULE est désormais activée par défaut. Pour revenir au comportement précédent, GO111MODULE doit être défini sur auto. Les commandes de construction comme go build et go test ne modifient plus go.mod et go.sum par défaut. Au lieu de cela, elles signalent une erreur si une exigence de module ou une somme de contrôle doit être ajoutée ou mise à jour. Les exigences et les sommes des modules peuvent être ajustées avec go mod tidy ou go get.

Avec Go 1.16, go install accepte les arguments avec des suffixes de version. Ce qui permet à la commande go install de construire et installer les paquets en mode ‘’compatibilité avec les modules ", en ignorant le fichier go.mod dans le répertoire courant ou dans tout répertoire parent, s'il y en a un. Ceci est utile pour installer des exécutables sans affecter les dépendances du module principal.

Les directives de retract peuvent désormais être utilisées dans un fichier go.mod pour indiquer que certaines versions publiées du module ne doivent pas être utilisées par d'autres modules. L'auteur d'un module peut rétracter une version après la découverte d'un problème grave ou si la version a été publiée involontairement. Les sous-commandes go mod vendor et go mod tidy acceptent désormais le paramètre -e, qui indique de continuer malgré les erreurs de résolution des paquets manquants. La commande go ignore désormais les exigences des versions de module exclues par des directives excludedans le module principal.

Les fichiers : la commande go permet maintenant d'inclure des fichiers statiques et des arborescences de fichiers dans l'exécutable final, en utilisant la nouvelle directive //go:embed.

go test : lors de l'utilisation de go test, un test qui appelle os.Exit(0) pendant l'exécution d'une fonction de test sera désormais considéré comme un échec. Cela permettra de détecter les cas dans lesquels un test appelle un code qui appelle os.Exit(0) et arrête ainsi l'exécution de tous les futurs tests. Si une fonction TestMain appelle os.Exit(0), elle est toujours considérée comme un test réussi. La commande go test signale une erreur lorsque les paramètres -c ou -i sont associés à des paramètres inconnus. Lorsque les paramètres -c ou -i sont utilisés, les tests ne sont pas exécutés.

Runtime avec Go 1.16

Le nouveau paquet runtime/metrics introduit une interface stable pour la lecture des métriques définies par l'implémentation dans l’environnement d’exécution de Go. Il remplace les fonctions existantes comme runtime.ReadMemStats et debug.GCStats est beaucoup plus général et efficace. Le paramétrage de la variable d'environnement GODEBUG à inittrace=1 fait maintenant que le runtime émet une seule ligne d'erreur standard pour chaque paquet init, résumant son temps d'exécution et l’allocation mémoire.

Sous Linux, l’environnement d'exécution par défaut permet maintenant de libérer rapidement de la mémoire pour le système d'exploitation (en utilisant MADV_DONTNEED), cela signifie que les statistiques de mémoire au niveau des processus telles que RSS reflèteront plus précisément la quantité de mémoire physique utilisée par les processus Go. Les systèmes qui utilisent actuellement GODEBUG=madvdontneed=1 pour améliorer le comportement de surveillance de la mémoire n'ont plus besoin de définir cette variable d'environnement.

La dernière version de Go, la version 1.16, arrive six mois après la version 1.15. La plupart des changements apportés concernent la mise en œuvre de la chaîne d'outils, de l'exécutable et des bibliothèques. Google affirme que cette version maintient la promesse de compatibilité de Go 1. Notons que Go 1.16 nécessite l'utilisation de modules Go par défaut, selon un sondage réalisé en 2020 par Google pour Go, 96 % des développeurs Go auraient délaissé un autre langage pour se mettre à Go. Rob Pike, l’un des trois créateurs du langage, a déclaré à propos des développeurs inexpérimentés : « ils ne sont pas capables de comprendre un langage brillant, mais nous voulons les amener à réaliser de bons programmes. Ainsi, le langage que nous leur offrons doit être facile à comprendre et facile à adopter ».

Source : Go blog

Et vous ?

Que pensez-vous de la version 1.16 de Go ?

Quels sont les changements qui captent votre attention ?

Voir aussi

Google pourrait apporter la prise en charge du paramétrage de type à son langage Go plus tard cette année, permettant aux développeurs de bénéficier d'une forme de programmation générique

Langage de programmation Go : combien de professionnels l'utilisent ? Où sont-ils ? Quelles sont les perspectives d'avenir du langage ? JetBrains fait un état des lieux de son écosystème

La version 1.15 du langage de programmation Go sortira bientôt, avec des améliorations dans l'outillage, la performance du compilateur et la bibliothèque standard

GoLand 2020.2 disponible, l'EDI de JetBrains apporte de nouvelles fonctionnalités pour les modules Go et de nouveaux moyens d'examiner et de corriger les problèmes dans votre code

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de denisys
Membre chevronné https://www.developpez.com
Le 18/02/2021 à 19:11
Est-ce que quelqu’un peut éclaircir la formule suivante ?:
386 : comme annoncé dans les notes de version de Go 1.15,
Go 1.16 supprime le support de la compilation en mode x87 (GO386=387).
La prise en charge des processeurs non SSE2 est désormais disponible en utilisant le mode soft float (GO386=softfloat).
Les responsables du développement de Go invitent les développeurs qui utilisent des processeurs non-SSE2 à remplacer GO386=387 par GO386=softfloat.
1  0 
Avatar de Waikiki
Membre averti https://www.developpez.com
Le 18/02/2021 à 21:09
Si j'ai bien compris :

Abandon des compilations via jeux d'instructions de calcul en virgule flottante utilisés par un coprocesseur sur des archi style amdK6, pentium 4, 8087, athlon 64, au profit de l'option softfloat pour les compilations, donc via emulation software pour les jeux d'instructions du x87.

La FPU, ou Floating Point Unit (unité de traitement des nombres à virgule flottante), est une extension présente depuis le 8086 mais pas systématiquement.

Au début, c’était un composant externe, un coprocesseur. Le 8086 avait comme coprocesseur optionnel le 8087 et jusqu’au 80486 ce coprocesseur était optionnel et sa référence terminait par 87 au lieu de 86.
1  0