Go 1.11 lanzado - WebAssembly y módulos nativos

Este viernes , se lanzó Go 1.11. Los aspectos clave de la versión son el soporte experimental para WebAssembly, así como un nuevo concepto para Módulos, que están diseñados para convertirse en el estándar para la distribución de código.

Antes de pasar a lo principal del lanzamiento, vale la pena decir algunas palabras sobre los cambios que no son tan notorios para el usuario. Como en versiones anteriores, en Go 1.11, se trabajó para mejorar el lenguaje, la cadena de herramientas y las bibliotecas de tiempo de ejecución (por ejemplo, ahora no hay restricciones sobre el tamaño máximo de la cadera). Por supuesto, se trabajó para aumentar la productividad del lenguaje (sobre todo en matemática / aritmética grande -larga).

Ahora sobre WebAssembly. De hecho, en Habré ya hay varios artículos sobre cómo escribir código para Wasm on Go. Entonces, esta característica experimental en el lanzamiento no es noticia en absoluto. Sin embargo, creo que todos entienden que esto es muy importante. Después de todo, si la computadora logra finalizar la cadena de herramientas, así como Wasm a un estado listo para producción, entonces podemos escribir código de front-end en un lenguaje agradable con tipeo estático fuerte (¡hola, javascript!). Aquí hay un pequeño ejemplo del uso de la tecnología:


Por cierto, varias soluciones ya han comenzado a aparecer para mejorar la vida de los programadores para el desarrollo front-end. Por ejemplo, https://github.com/dave/wasmgo - compilando Ir a WASM e implementar en CDN con un solo comando.

Ahora pasemos a lo más importante, en mi opinión, en esta versión: el sistema de módulos. Hablar sobre estos módulos ya comenzó hace mucho tiempo. Eran conocidos en el mundo como Vgo . Los módulos incluso se han discutido en RuNet - https://habr.com/sandbox/115542/ , así como en el marco del podcast de Devzen por el famoso Gopher - Alexey - https://devzen.ru/episode-0180/ . Una buena introducción a los módulos es https://roberto.selbach.ca/intro-to-go-modules/ .

Lo más importante en estos módulos:

  • Trabaja en Semver . Además, el comando go mod le permite actualizar solo la versión máxima de Patch (tercer número de versión) y cualquier versión máxima menor (segundo o tercer número de versión). En la versión principal, que rompe la compatibilidad, no se actualizará automáticamente de ninguna manera, y esto es muy maravilloso.
  • El proceso de abandonar el concepto GOPATH ha comenzado . Los desarrolladores de Go quieren alejarse de esta abstracción en 2019, por lo que ahora los nuevos módulos funcionan solo fuera de GOPATH. Sin embargo, puede establecer la variable de entorno GO111MODULE = on para eliminar esta restricción.
  • El proceso de abandonar Vendoring ha comenzado. Hasta ahora, existe una oportunidad en los nuevos módulos para colocar las dependencias en una carpeta separada y usarlas desde allí. Sin embargo, en el futuro, los desarrolladores de Go quieren alejarse de esto. En su opinión, las dependencias siempre deben obtenerse del repositorio (por ejemplo, Github), o la compañía debe delegar el repositorio almacenando en caché el código fuente de su lado (por ejemplo, usando Artifactory).

Es importante entender que Nuevos Módulos también sigue siendo un experimento. Las herramientas de desarrollo modernas aún no están listas para esto. Por lo tanto, es posible que deba seguir viviendo con Dep . Sin embargo, ya hay intentos de obtener Vgo en CI pública: https://arslan.io/2018/08/26/using-go-modules-with-vendor-support-on-travis-ci/ .

En GoLand, los nuevos módulos ya existen como abstracción. Sin embargo, todo funciona relativamente crudo (por ejemplo, si descarga el módulo usando Vgo, pero sin hacerlo, entonces su código no comenzará a analizarse):

imagen

Para resumir. Go 1.11 es un gran lanzamiento. Nada se rompió (como siempre), y esto es muy bueno. Han aparecido características interesantes. Obtuvimos automáticamente un aumento de rendimiento. En general, todo está como debería estar en el lenguaje moderno para el desarrollo industrial. Y los cambios serán en el próximo Go 2, que ahora se está discutiendo activamente.

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


All Articles