Вышел Go 1.23

13 августа 2024 года cостоялся релиз языка программирования Go 1.23. Этот проект развивает компания Google при участии сообщества как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Исходный код языка Go распространяется под открытой лицензией BSD. Выпуск Go 1.22 состоялся в феврале 2024 года.

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

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

Основные изменения и доработки в выпуске Go 1.23:

• в циклах «for» при определении диапазонов значений появилась возможность указания функции в качестве аргумента выражения «range» для использования этой функции в качестве итератора, что позволяет создавать собственные итераторы для любых последовательностей. Возможно указание функций следующих типов: func(func() bool), func(func(K) bool) и func(func(K, V) bool). Добавлен новый пакет iter, предоставляющий базовые операции для организации перебора последовательностей. Кроме того, в пакеты slices и maps добавлены новые возможности для работы с итераторами. Например, для перебора ключей ассоциативного массива в отсортированном виде теперь можно указать «for i, x := range slices.Sorted(maps.Keys(m)) {…}»;

• добавлена предварительная поддержка (включается через GOEXPERIMENT=aliastypeparams) использования псевдонимов типов со своими параметрами в обобщённых функциях (дженериках), при помощи которых можно создавать функции для работы сразу с несколькими типами;

• добавлена команда «go env -changed» для вывода только настроек, значения которых отличаются от значений по умолчанию;

• добавлена команда «go mod tidy -diff», позволяющая вместо внесения изменений в файлы, вывести изменения в форме патча в формате diff;

• в команду «go vet» добавлен анализатор версий, показывающий элементы, слишком новые для использования в выбранной версии Go. Например, анализатор выдаст предупреждение об использовании функции reflect.TypeFor, появившейся в версии Go 1.22, при попытке использования в модуле, заявляющем поддержку версии Go 1.21;

• улучшена реализация типов time.Timer и time.Ticker, в которые внесены изменения связанные с буферизацией и оптимизацией сборки мусора;

• добавлен пакет structs, определяющий типы для изменения свойств структуры;

• добавлен пакет unique с функциями для канонизации сопоставимых значений;

• в файлы go.mod и go.work добавлена поддержка директивы godebug для управления отладкой;

• добавлена экспериментальная поддержка OpenBSD на 64-разрядных системах RISC-V (openbsd/riscv64). Улучшена поддержка Linux, macOS, ARM64, RISC-V и WASI;

• повышена производительность на архитектурах i386 и amd64 при включении оптимизации на основе результатов профилирования кода (PGO — Profile-guided optimization), позволяющей учитывать особенности, определяемые во время выполнения программы;

• в инструментарий Go встроена возможность отправки телеметрии на сервер telemetry.go.dev. Телеметрия сохраняется в локальных файлах, доступных для аудита, и охватывает только данные об особенностях работы с инструментарием (телеметрия не добавляется в пользовательские приложения, собираемые при помощи инструментария). По умолчанию отправка телеметрии на внешний сервер отключена (opt-in) и требует активации при помощи новой команды «go telemetry on». Отправка телеметрии поможет выявить аномалии и нештатное поведение, оценить особенности взаимодействия разработчиков с инструментарием и понять, какие опции наиболее востребованы, а какие почти не используются. Предполагается, что накопленная статистика даст возможность модернизировать инструментарий, позволит повысить эффективность и удобство работы.

Источник: habr.com

0 0 голоса
Рейтинг новости
2709
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии