Go 1.11 est lancé - WebAssembly et modules natifs

Ce vendredi , Go 1.11 est sorti . Les éléments clés de la version sont un support expérimental pour WebAssembly, ainsi qu'un nouveau concept pour les modules, qui sont conçus pour devenir la norme pour la distribution de code.

Avant de passer aux principaux éléments de la version, il convient de dire quelques mots sur les changements qui ne sont pas si visibles pour l'utilisateur. Comme dans les versions précédentes, dans Go 1.11, des travaux ont été effectués pour améliorer le langage, la chaîne d'outils et les bibliothèques d'exécution (par exemple, il n'y a plus de restrictions sur la taille maximale de Hip). Bien sûr, un travail a été fait pour augmenter la productivité de la langue (surtout - en mathématiques / arithmétique grande - longue).

Maintenant sur WebAssembly. En fait, sur Habré, il y a déjà plusieurs articles sur la façon d'écrire du code pour Wasm on Go. Cette fonctionnalité expérimentale de la version n'est donc pas du tout une nouveauté. Cependant, je pense que tout le monde comprend que c'est très important. Après tout, si l'ordinateur réussit à finaliser la chaîne d'outils, ainsi que Wasm, à un état prêt pour la production, alors nous pouvons écrire du code frontal dans un langage agréable avec une frappe forte statique (bonjour, javascript!). Voici un petit exemple de l'utilisation de la technologie -


Soit dit en passant, diverses solutions ont déjà commencé à apparaître pour améliorer la vie des programmeurs pour le développement frontal. Par exemple, https://github.com/dave/wasmgo - compilation Allez sur WASM et déployez sur CDN en une seule commande.

Passons maintenant à la chose la plus importante, à mon avis, dans cette version - le système de modules. Parler de ces modules a déjà commencé il y a longtemps. Ils étaient connus dans le monde comme Vgo . Des modules ont même été discutés dans RuNet - https://habr.com/sandbox/115542/ , ainsi que dans le cadre du podcast Devzen du célèbre Gopher - Alexey - https://devzen.ru/episode-0180/ . Une bonne introduction aux modules est https://roberto.selbach.ca/intro-to-go-modules/ .

La chose la plus importante dans ces modules:

  • Travail sur Semver . De plus, la commande go mod vous permet de mettre à jour uniquement la version maximale du patch (troisième numéro de version) et toute version mineure maximale (deuxième ou troisième numéro de version). Sur la version principale, qui rompt la compatibilité, vous n'effectuerez aucune mise à niveau automatique - et c'est très merveilleux.
  • Le processus d'abandon du concept GOPATH a commencé . Les développeurs de Go veulent s'éloigner de cette abstraction en 2019, donc déjà de nouveaux modules ne fonctionnent qu'en dehors de GOPATH. Cependant, vous pouvez définir la variable d' environnement GO111MODULE = on pour supprimer cette restriction.
  • Le processus de sortie de Vendoring a commencé. Jusqu'à présent, les nouveaux modules ont la possibilité de placer les dépendances dans un dossier séparé et de les utiliser à partir de là. Cependant, à l'avenir, les développeurs de Go voudront s'en tirer. À leur avis, les dépendances doivent toujours être obtenues à partir du référentiel (par exemple, Github), ou la société doit proxy le référentiel en mettant en cache le code source de son côté (par exemple, en utilisant Artifactory).

Il est important de comprendre que les nouveaux modules sont également encore une expérience. Les outils de développement modernes ne sont pas tout à fait prêts pour cela. Par conséquent, vous devrez peut-être continuer à vivre avec Dep . Cependant, il existe déjà des tentatives pour obtenir Vgo sur CI public - https://arslan.io/2018/08/26/using-go-modules-with-vendor-support-on-travis-ci/ .

Dans GoLand, de nouveaux modules existent déjà en tant qu'abstraction. Cependant, tout fonctionne relativement grossièrement (par exemple, si vous téléchargez le module en utilisant Vgo, mais sans faire aller chercher , alors votre code ne commencera pas à être analysé):

image

Pour résumer. Go 1.11 est une excellente version. Rien ne s'est cassé (comme d'habitude) - et c'est très cool. Des fonctionnalités intéressantes sont apparues. Nous avons automatiquement obtenu une amélioration des performances. En général, tout est comme il se doit dans le langage moderne du développement industriel. Et les changements seront dans le prochain Go 2, qui est maintenant activement discuté.

Source: https://habr.com/ru/post/fr421355/


All Articles