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

17.02.2017 09:47

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

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

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

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

  • Добавленный в прошлом выпуске бэкенд компилятора SSA (Static Single Assignment), обеспечивающий прирост производительности оценивается в 5-35%, задействован для всех архитектур, а не только для x86_64. Собранные с использованием нового бэкенда программы, продемонстрировали в тестах снижение нагрузки на CPU на 20-30% для 32-разрядных систем ARM. По сравнению с прошлым выпуском также проведена работа по увеличению производительности компиляции, которая на системах x86_64 стала выполняться на 15% быстрее;
  • Проведена работа по сокращению периодов активации сборщика мусора, приводящих к приостановке выполнения кода приложения. Сборщик мусора теперь осуществляет свою работу в рамках более коротких циклов, не превышающих 100 мс и обычно длящихся около 10 мс.
  • В модуль с реализацией функций HTTP-сервера добавлена поддержка операций Push для HTTP/2, которые позволяют серверу инициировать обращение к клиенту. В http-сервер также добавлен режим завершения работы (graceful shutdow) с ожиданием окончания обработки активных запросов;
  • В модуль context добавлены средства для принудительного завершения соединений и использования таймаутов. Поддержка контекстов добавлена во многие штатные библиотеки, включая database/sql, net и функцию Server.Shutdown из net/http;
  • В модуль sort добавлена новая функция Slice, упрощающая сортировку данных с типом slice. Например, для сортировки структур по полю "Name" можно выполнить:
       sort.Slice(s, func(i, j int) bool { return s[i].Name < s[j].Name })