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

После шести месяцев разработки компания 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, предназначенная для поставки внешних зависимостей, привязанных к определённому поставщику, переведена в разряд неотключаемых возможностей.

© OpenNet