Релиз языка программирования Go 1.8
Синтаксис 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 < s[j].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, в котором почти доведены до полноценного состояния сетевые функции.
Источник: http://www.opennet.ru/opennews/art.shtml?num=46067
|
0 | Tweet | Нравится |
|