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

17 февраля 2017 года

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

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

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

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

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

sort.Slice(s, func(i, j int) bool { return s[i].Name
  • Проведена оптимизация модулей bytes, crypto/aes, crypto/cipher, crypto/elliptic, crypto/sha256, crypto/sha512, encoding/asn1, encoding/csv, encoding/hex, encoding/json, hash/crc32, image/color, image/draw, math, math/big, reflect, regexp, runtime, strconv, strings, syscall, text/template и unicode/utf8;
  • Добавлена поддержка 32-разрядной архитектуры MIPS (MIPS32r1) для систем big-endian (linux/mips) и little-endian (linux/mipsle);
  • Изменены требования к минимально поддерживаемым версиям: DragonFly 4.4.4, OpenBSD 5.9 и OS X 10.8;
  • Значительно улучшен порт для Plan 9, в котором почти доведены до полноценного состояния сетевые функции.

Источники

править


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

Комментарии

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