Новости и события » Hi-Tech » Релиз языка программирования Go 1.12

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

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

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

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

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

  • В пакет crypto/tls добавлена реализация протокола TLS 1.3. В реализации пока отсутствует поддержка режима 0-RTT, применяемого для устранения задержек при возобновлении ранее установленных защищенных соединений. Поддержка TLS 1.3 пока отключена по умолчанию и для включения требует установки опции "tls13=1" в переменной окружения GODEBUG. Включение TLS 1.3 по умолчанию ожидается в следующем выпуске;
  • Продолжена работа по усовершенствованию новой системы модулей, которую можно применять в качестве альтернативы GOPATH. Система модулей отличается интегрированной поддержкой версионирования, средствами доставки пакетов и улучшенной системой управления зависимостями. При помощи модулей разработчики больше не привязаны к работе внутри дерева GOPATH, могут явно определять зависимости с учетом версий и создавать повторяемые сборки. Из улучшений по сравнению с прошлым выпуском отмечается реализация поддержки параллельного выполнения операций загрузки и извлечения модулей при помощи команды go. Директива "go" внутри файла go.mod теперь учитывает версию языка Go, используемую в коде модуля (по умолчанию используется текущий релиз).

    По умолчанию систему модулей планируется предложить в выпуске Go 1.13. До этого требуется явная активация системы модулей через переменную GO111MODULE=on или использование контекста, в котором модули применяются автоматически (например, когда команда go выполняется не в каталоге GOPATH/src и когда в корне текущего каталога присутствует файл go.mod). Начиная с текущего выпуска система модулей также автоматически используется при выполнении команд подобных "go run x.go" или "go get rsc.io/[email protected]" без явного указания файла go.mod;
  • В компиляторе улучшен анализ изменения переменных (live variable analysis). Расширен спектр функций для которых по умолчанию применяется inline-развертывание кода, в том числе данная оптимизация теперь применима для функций, работа которых ограничивается вызовом других функций.

    Добавлен новый флаг "-lang" позволяющий выбрать конкретную версию языка, например, в процессе компиляции будет выведена ошибка, если запустить компилятор с флагом "-lang=go1.8" для программы, в которой используется функциональность более новых версий Go. Значительно улучшена генерация отладочной информации в формате DWARF, в том числе добавлены сведения о выводимых аргументах и местоположении переменных.
  • Значительно увеличена производительность сборки мусора в ситуациях, когда большая часть кучи остается активной, что позволяет уменьшить время выделения памяти сразу после сборки мусора;
  • В Go runtime улучшена масштабируемость кода таймеров (timer и deadline) на системах с большим числом CPU;
  • В Go runtime обеспечен более агрессивный возврат освобожденной памяти обратно операционной системе. Для возвращения неиспользуемой памяти в Linux в задействован флаг MADV_FREE, который только помечает блок доступным для освобождения, но не освобождает сразу, что позволяет вернуть его без генерации "page fault", если обращение произошло до его фактического использования ядром.
  • В переменной окружения GODEBUG добавлена поддержка флага "cpu.extension=off", отключающего использования расширенных инструкций CPU в коде стандартной библиотеки и в runtime;
  • Утилита godoc теперь не предоставляет интерфейс командной строки, а доступна только в форме web-сервера для просмотра документации через браузер. Для вывода подсказки в командной строке следует использовать команду "go doc". В "go doc" добавлена новая опция "-all" для вывода всех экспортируемых API и документации по ним;
  • Детектор состояний гонки (race detector) портирован для платформы linux/arm64;
  • Прекращена поддержка команды "go tool vet", вместо которой рекомендуется использовать "go vet" с определением поддержки внешних анализаторов кода через модуль analysis;
  • Добавлена поддержка ОС AIX 7.2 и более новых выпусков на системах с архитектурой POWER8 (aix/ppc64);
  • Добавлена поддержка платформы Windows на системах с архитектурой ARM, например, Go теперь можно использовать на платах Raspberry Pi 3 с ОС Windows 10 IoT Core;
  • Для совместимости с будущими выпусками macOS и iOS задействована библиотека libSystem, выступающая прослойкой для выполнения специфичных для платформы Darwin системных вызовов. Начиная с версии Go 1.13 будет прекращена поддержка macOS 10.10 "Yosemite", в качестве минимально поддерживаемой версии macOS станет 10.11 "El Capitan". В следующем выпуске также планируется прекратить поддержку ветки FreeBSD 10.x.

Свежие новости Украины на сегодня и последние события в мире экономики и политики, культуры и спорта, технологий, здоровья, происшествий, авто и мото

Вверх