Вышел Go 1.26: до 40% быстрее GC, дешевле cgo и экспериментальный SIMD
Что еще нового в релизе?
Новости TprogerGo 1.26 вышел спустя полгода разработки. Релиз традиционно без фанфар, но с ощутимыми изменениями под капотом: ускорили сборку мусора, удешевили вызовы C-кода, усилили защиту рантайма и добавили несколько экспериментальных пакетов.
Новый GC по умолчанию: минус до 40% накладных расходов
Так, в релизе включён сборщик мусора greenteagc. Он оптимизирован для частого создания и сканирования мелких объектов.
В приложениях с активной аллокацией это даёт снижение накладных расходов GC на 10–40%. Если у вас сервис с короткоживущими структурами, это обновление может стать бесплатным ускорением, без изменения кода.
cgo стал дешевле
Вызовы функций на C через cgo также подешевели примерно на 30%. Это важно для проектов, которые тянут нативные библиотеки (криптография, обработка изображений, старый C-код).
Дополнительно в runtime для 64-битных платформ включили рандомизацию адресного пространства (heap base). Это усложняет эксплуатацию уязвимостей в C-коде, подключённом через cgo. При необходимости можно отключить через:
new() теперь умеет принимать выражения
Встроенная функция new() получила маленькое, но приятное расширение: теперь можно передать выражение для начального значения.
Было:
Теперь можно:
Мелочь, но код становится компактнее и чище.
Обобщённые типы: разрешили «ссылаться на себя»
Generics стали чуть гибче. Теперь тип может передавать сам себя в список параметров типа:
Раньше такая самоссылка вызывала ошибку. Теперь — нет. Для сложных generic-алгоритмов это снимает лишние ограничения.
Больше аллокаций в стеке, меньше в куче
Компилятор расширил список случаев, когда слайсы размещаются в стеке, а не в куче. А так как меньше давления на GC, то и выше производительность.
go fix переписали полностью
Команду go fix переписали на базе пакета analysis. Теперь она использует анализаторы из пакета modernize, которые предлагают правки с учётом новых возможностей языка и стандартной библиотеки.
Также появился анализатор inline — он разворачивает вызовы функций, помеченных директивой:
Новые пакеты
В стандартную библиотеку добавили:
- crypto/hpke — реализация Hybrid Public Key Encryption
- crypto/mlkem/mlkemtest
- testing/cryptotest
Появился экспериментальный simd/archsimd — низкоуровневый доступ к SIMD-инструкциям на AMD64. Это первый осторожный шаг Go в сторону управляемых векторных вычислений без ассемблера.
Также добавили экспериментальный runtime/secret для безопасного обнуления временной памяти и новый профиль goroutineleak в runtime/pprof — для поиска утечек горутин.
Скачать Go 1.26 можно по ссылке.