Pull to refresh

Go 1.11 зарелизился — WebAssembly и Нативные модули

Reading time3 min
Views11K
В эту пятницу состоялся релиз Go 1.11. Ключевые вещи релиза — экспериментальная поддержка WebAssembly, а также новая концепция Модулей, которые призваны стать стандартом распространения кода.

Перед тем, как перейти к главным вещам релиза, стоит сказать несколько слов о не столь заметных пользователю изменениях. Как и в предыдущих релизах, в Go 1.11 была проведена работа по улучшению библиотек языка, тулчейна и рантайма (например, теперь нет ограчений на максимальный размер Хипа). Конечно же, выполнялись работы и по повышению производительности языка (больше всего — в math/big — длинной арифметике).

Теперь о WebAssembly. На самом деле, на Хабре уже есть несколько статей о том, как писать код для Wasm на Go. Так что, эта экспериментальная фича в релизе — вовсе не новость. Однако, думаю, всем понятно, что это очень важно. Ведь, если у компьюнити получится доработать тулчейн, а также Wasm до production-ready состояния, то мы сможем писать фронтовый код на приятном языке со статической строгой типизацией (привет, javascript!). Вот небольшой пример использования технологии —


К слову, уже начали появляться разные решения для улучшения жизни программистов для разработки под фронтенд. Например, https://github.com/dave/wasmgo — компиляция Go в WASM, и deploy в CDN в одну команду.

Теперь перейдём к самому главному, на мой взгляд, в этом релизе — системе Модулей. Про эти модули разговоры уже начались довольно давно. Они были известны миру, как Vgo. Модули даже уже обсуждались в рунете — https://habr.com/sandbox/115542/, а также в рамках подкаста Devzen известным Гофером — Алексеемhttps://devzen.ru/episode-0180/. Хорошее введение в модули — https://roberto.selbach.ca/intro-to-go-modules/.

Самое главное в этих модулях:

  • Работают по Semver. Причём, команда go mod позволяет, как обновится только на максимальную Патч-версию (третье число версии), так и на любую максимальную Минорную версию (второе или третье число версии). На мажорную версию, которая ломает совместимость, вы автоматически никак не обновитесь — и это очень замечательно.
  • Начат процесс отказа от концепции GOPATH. Разработчики Go хотят уйти от этой абстракции в 2019 году, поэтому уже сейчас новые модули работают только вне GOPATH. Однако можно установить переменую окружения GO111MODULE=on, чтобы убрать это ограничение.
  • Начат процесс ухода от Вендоринга (Vendoring). Пока что, есть возможность в новых модулях положить зависимости в отдельную папку, и использовать их от туда. Однако в будущем разработчики Go хотят уйти от этого. По их мнению, зависимости всегда должны доставаться из репозитория (например, Гитхаб), либо компания должна проксировать репозиторий, кэшируя исходники на своей стороне (например, с помощью Artifactory).

Важно понимать, что Новые модули — это тоже всё ещё эксперимент. Современные средства разработки ещё не совсем готовы к этому. Поэтому, возможно вам придётся и дальше жить с Dep. Однако уже есть попытки завести Vgo на публичных CI — https://arslan.io/2018/08/26/using-go-modules-with-vendor-support-on-travis-ci/.

В GoLand новые модули уже существуют, как абстракция. Однако работает всё относительно сыро (например, если вы скачаете модуль, используя Vgo, но не делая go get, то код у вас не начнёт анализироваться):

image

Подведём итоги. Go 1.11 — отличный релиз. Тут ничего не сломалось (как и обычно) — и это очень здорово. Появились интересные фичи. Мы получили автоматически некоторый прирост производительности. В общем, всё так, как и должно быть в современном языке для индустриальной разработки. А изменения будут в грядущем Go 2, который сейчас активно обсуждается.
Tags:
Hubs:
Total votes 36: ↑34 and ↓2+32
Comments40

Articles