Выпуск языка программирования Go 1.21

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3258
Зарегистрирован: 20.08.2022

#

Выпуск языка программирования Go 1.21
Дата публикации:Tue, 08 Aug 2023 22:49:04 +0300




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



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



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



Среди изменений в новом выпуске:
  • Реализована поддержка оптимизаций на основе результатов профилирования кода (PGO - Profile-guided optimization), учитывающих особенности, определяемые во время выполнения программы. Учёт профиля выполнения при сборке позволяет повысить производительность приложений на 2-7%. Оптимизации автоматически включаются при наличии файла default.pgo во время сборки, подготовленного утилитой pprof. Для выбора другого профиля предусмотрена опция "-pgo".

    В утилите go обеспечена прямая и обратная совместимость с другими версиями языка Go, что позволяет использовать старый инструментарий для сборки нового кода и наоборот.

    Добавлены встроенные функции min и max для выбора наименьшего/наибольшего значения, а также функция clear для удаления или обнуления всех элементов в структурах map или slice.

    Улучшен вывод типов в обобщённых функциях (дженериках), предназначенных для работы сразу с несколькими типами.

    Добавлена экспериментальная поддержка новой семантики обработки переменных в циклах, позволяющей избежать типовых ошибок из-за специфичного поведения при использовании замыканий и сопрограмм в итерациях. Новая семантика подразумевает создание для каждой итерации цикла отдельного экземпляра переменной, объявленной в цикле "for" при помощи оператора ":=".


    В стандартную библиотеку добавлены новые пакеты:

    log/slog - функции для записи структурированных логов.
    slices - типовые операции со срезами (slice) любых типов. Например, предложены функции для сортировки, более быстрые и гибкие, чем функции из пакета sort.
    maps - полезные операции над отображениями (map) с любыми типами ключей и элементов.

    cmp - функции для сравнений упорядоченных значений.
Компилятор пересобран с включением PGO-оптимизаций, что позволило ускорить сборку программ на 2-4%.
Проведена оптимизация сборщика мусора, позволившая до 40% уменьшить задержки в некоторых приложениях.
Снижены накладные расходы при трассировке кода при помощи пакета runtime/trace на системах с архитектурой amd64 и arm64.


Реализован экспериментальный порт (GOOS=wasip1, GOARCH=wasm) для компиляции в промежуточный код WebAssembly, использующий API WASI (WebAssembly System Interface) для обеспечения обособленного запуска.





Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=59570

Жизнь за Нер'зула!

Ответить