Выпуск языка программирования Go 1.7

Материал из Викиновостей, свободного источника новостей

16 августа 2016 года

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

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

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

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

  • Новый бэкенд компилятора, использующий промежуточный код на базе SSA (Static Single Assignment). SSA предоставляет низкоуровневые операции, которые во многом отражают обычные машинные инструкции, за исключением того, что предоставляют возможность работы с неограниченным числом регистров. Применение SSA позволяет задействовать при сборке дополнительные классы оптимизаций и, соответственно, добиться увеличения производительности результирующего кода. Например, появляется возможность выявить ситуации в которых проверки выхода за границы не имеют смысла или можно исключить части выражений. В среднем прирост производительности оценивается в 5-35%. Для разработчиков бэкенд на базе SSA предоставляет ряд расширенных средств аналитики, позволяющих на низком уровне проанализировать ход компиляции и принятые решения по оптимизации. Новый бэкенд пока доступен только для архитектуры amd64;
  • Во фронтэнде компилятора задействован новый более компактный формат экспорта данных и обеспечен более эффективный импорт определений. Данные изменения позволили значительно ускорить компиляцию и на 20-30% сократить размер исполняемых файлов;
  • Внесены оптимизации в сборщик мусора, которые позволили немного увеличить производительность и значительно сократили паузы при сборке мусора в программах с большим числом неактивных потоков (goroutines);
  • Внесены оптимизации в различные модули стандартной библиотеки. Например, ускорение более чем на 10% отмечено в библиотеках

crypto/sha1, crypto/sha256, encoding/binary, fmt, hash/adler32, hash/crc32, hash/crc64, image/color, math/big, strconv, strings, unicode и unicode/utf16;

  • Реализован порт для Linux на IBM z Systems (s390x);
  • В состав стандартной библиотеки включён пакет golang.org/x/net/context, популярный среди разработчиков сетевых приложений и микросервисов. Начиная с Go 1.7 данная библиотека доступна под именем context без префикса "/x/net/".

Поддержка модуля context добавлена в штатные пакеты net/http и os/exec;

  • Директория vendor, предназначенная для поставки внешних зависимостей, привязанных к определённому поставщику, переведена в разряд неотключаемых возможностей.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Выпуск языка программирования Go 1.7», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.