Выпуск языка программирования Go 1.23 с поддержкой телеметрии

После шести месяцев разработки увидел свет релиз языка программирования Go 1.23, который развивается компанией Google при участии сообщества как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Код проекта распространяется под лицензией BSD.

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

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

Среди изменений в новом выпуске:

  • В циклах «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) использования псевдонимов типов со своими параметрами в обобщённых функциях (дженериках), при помощи которых можно создавать функции для работы сразу с несколькими типами.

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

    CFD0C5CECEC5D4_1723618567.png

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

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

  • В команду «go vet» добавлен анализатор версий, показывающий элементы, слишком новые для использования в выбранной версии Go. Например, анализатор выдаст предупреждение об использовании функции reflect.TypeFor, появившейся в версии 1.22, при попытке использования в модуле, заявляющем поддержку версии 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), позволяющей учитывать особенности, определяемые во время выполнения программы.



Источник: http://www.opennet.ru/opennews/art.shtml? num=61701

OpenNet прочитано 9709 раз