Go 1.7 Идет быстрее и в большем количестве направлений


Была выпущена обновленная версия Go с поддержкой систем IBM z и улучшениями компилятора.

Поддержка IBM z Systems поставляется в виде порта для Linux, работающего на системах z (s390x). Порт все еще находится на экспериментальной стадии, и новая версия также включает в себя начало порта для планирования 9 на ARM (plan9/arm).

Компилятор был переработан с новой серверной частью, основанной на статической форме с одним назначением (SSA). Серверная часть разрабатывалась в течение года с целью более легкого выполнения расширенных оптимизаций.

Согласно сообщению в блоге Go language:

“Этот новый сервер генерирует более компактный и эффективный код, который включает в себя такие оптимизации, как исключение проверки границ и исключение общего подвыражения. Мы наблюдали ускорение на 5-35% по всем нашим контрольным показателям. На данный момент новый бэкэнд доступен только для 64-разрядной платформы x86 (“amd64″), но мы планируем преобразовать больше бэкэндов архитектуры в SSA в будущих выпусках.”

Это, наряду с изменениями в интерфейсе компилятора, приводит к значительному ускорению времени компиляции и уменьшению размера двоичных файлов на целых 20-30%. Другие улучшения производительности сборщика мусора и оптимизации в стандартной библиотеке также должны помочь повысить производительность.

Одно “домашнее” изменение в новой версии было сделано для того, чтобы побудить больше программистов Go использовать контексты. Контексты используются для облегчения передачи значений области запроса, сигналов отмены и крайних сроков через границы API в goroutines, которым необходимо обработать запрос. Контексты полезны в приложениях, связанных с сетями, инфраструктурой и микросервисами, такими как Kubernetes и Docker. Они позволяют легко включить отмену, тайм-ауты и передачу данных в области запросов.

В надежде на то, что больше разработчиков распознают и будут использовать это средство, библиотека контекста была перенесена из репозитория x/net в стандартную библиотеку в качестве пакета контекста, а поддержка контекстов была добавлена в пакеты net, net/http и os/exec.

В Go 1.7 есть ряд других дополнений и улучшений, которые подробно описаны в примечаниях к выпуску Go 1.7.


Добавить комментарий