Выпуск языка программирования Go 1.26
После шести месяцев разработки представлен релиз языка программирования Go 1.26, развиваемого компанией Google при участии сообщества. Язык сочетает высокую производительность, свойственную компилируемым языкам, с такими достоинствами скриптовых языков, как простота написания кода, высокая скорость разработки и защита от ошибок. Код проекта распространяется под лицензией BSD.
Синтаксис Go основан на привычных элементах языка Си с отдельными заимствованиями из языка Оберон. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно, без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.
Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах. Например, на уровне операторов реализованы средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за границы буфера и обеспечивает возможность использования сборщика мусора.
Среди изменений в новом выпуске:
Включён по умолчанию сборщик мусора «greenteagc», рассчитанный на повышения производительности создания и сканирования мелких объектов. В приложениях, в которых активно применяется сборка мусора, при использовании «greenteagc» отмечается сокращение накладных расходов на сборку мусора на 10–40%.
- Во встроенной функции new (), предназначенной для создания новых переменных, появилась возможность указания выражения в качестве операнда, определяющего начальное значение переменной. Например, вместо кода
x := int64(300) ptr := &x
теперь можно писать:
ptr := new(int64(300))
- В обобщённых типах (generic) разрешено ссылаться на самого себя в качестве аргумента в списке собственных параметров типа (можно передать тип в свой же параметр). В примере ниже ранее ссылка Adder на самого себя в первой строке не допускалась:
type Adder[A Adder[A]] interface { Add(A) A } func algo[A Adder[A]](x, y A) A { return x.Add(y) } Накладные расходы при вызове функций на языке Си из кода на языке Go при помощи cgo снижены примерно на 30%.
На 64-разрядных платформах в runtime при запуске реализована рандомизация адресного пространства, что усложняет предсказание адресов в памяти при попытках эксплуатации уязвимостей в Си-коде, задействованном через cgo. Для отключения рандомизации предложена опция «GOEXPERIMENT=norandomizedheapbase64».
Расширено число ситуаций, в которых компилятор выделяет память для слайсов в стеке, а не в куче, что положительно сказывается на производительности.
Реализация команды «go fix» полностью переписана с использованием пакета analysis, предоставляющего функциональность для статистического анализа кода. Добавлена поддержка доступных в пакете modernize анализаторов, предлагающих правки для упрощения кода с учётом новых возможностей языка и стандартной библиотеки. Добавлен анализатор «inline» для inline-развёртывания всех вызовов функций, помеченных директивой »//go: fix inline».
Добавлены новые пакеты crypto/hpke (реализация HPKE — Hybrid Public Key Encryption), crypto/mlkem/mlkemtest и testing/cryptotest.
Добавлен экспериментальный пакет simd/archsimd, предоставляющий низкоуровневый доступ к выполнению векторных операций с использованием инструкций SIMD на системах с архитектурой AMD64.
Добавлен экспериментальный пакет runtime/secret для безопасной очистки (обнулению) временной памяти, выделенной при выполнении указанной функции.
В пакет runtime/pprof добавлен экспериментальный профиль goroutineleak для выявления утечек сопрограмм (goroutine).
Источник: http://www.opennet.ru/opennews/art.shtml? num=64773
OpenNet прочитано 823 раза
