Релиз языка программирования Go 1.11

Подготовлен релиз языка программирования Go 1.11, который развивается компанией Google при участии сообщества как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Код проекта распространяется под лицензией BSD.

Синтаксис Go основан на привычных элементах языка Си с отдельными заимствованиями из языка Python. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.

Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах, в том числе предоставляя реализованные на уровне операторов средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за допустимые области выделенных блоков памяти и обеспечивает возможность использования сборщика мусора.

Основные новшества, представленные в выпуске Go 1.11:

  • Реализована концепция модулей, которую можно применять в качестве альтернативы GOPATH, отличающейся интегрированной поддержкой версионирования, средствами доставки пакетов и улучшенной системой управления зависимостями. Система модулей пока является экспериментальной, поэтому синтаксис команд для работы с модулями может поменяться в будущем. Используя модули разработчики больше не привязаны к работе внутри дерева GOPATH, могут явно определять зависимости с учётом версий и создавать повторяемые сборки;
  • Добавлен экспериметальный порт для WebAssembly (js/wasm), позволяющий компилировать приложения на языке Go в промежуточный код WebAssembly для выполнения в web-браузерах. На выходе формируется готовый модуль WebAssembly, включающий runtime-компоненты для goroutine, планировщик, систему сборки мусора и т.п. Минимальный размер runtime-компонентов для WebAssembly составляет 2 Мб (при сжатии 500 Кб). Для вызова скомпилированных в WebAssembly программ из кода на JavaScript предложен экспериментальный модуль syscall/js;
  • Предложен пакет go/packages с реализаций простого API для поиска и загрузки пакетов с кодом на языке Go. API пока не включён в стандартную библиотеку, но может применяется в качестве эффективной замены пакета
    go/build, обеспечивающей поддержку модулей;

  • В компиляторе расширен диапазон функций для которых применяется inline-развёртывание кода. В том числе развёртывание теперь может применяться и для функций, в которых используется вызов panic().
  • Предложен новый формат экспорта данных для пакетов, обеспечивающий более высокую скорость сборки для больших проектов;
  • В ассемблере реализована поддержка инструкций AVX512 для архитектуры amd64;
  • Улучшено качестве отладочной информации, генерируемой для оптимизированных исполняемых файлов. Обеспечено сжатие отладочных секций в формате DWARF. Добавлена экспериментальная возможность вызова функций на языке Go из отладчика;
  • В различные части кодовой базы внесены оптимизации, специфичные для архитектуры arm64. В компиляторе задействованы более агрессивные оптимизации для исключения излишних переходов и проверок границ буферов. Проведена оптимизация производительности пакета math/big;
  • Прекращена поддержка OpenBSD 6.0, OS X 10.8 «Mountain Lion», OS X 10.9 «Mavericks», Windows XP и Windows Vista. Для работы теперь требуется как минимум OpenBSD 6.2, macOS 10.10 «Yosemite» или Windows 7. Добавлена поддержка OpenBSD 6.4. Race detector портирован для linux/ppc64le и netbsd/amd64. Режим поверки памяти (-msan) адаптирован для платформы linux/arm64.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.