категории | RSS

Вышел Go 1.24

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

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

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

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

обеспечена полная поддержка обобщённых псевдонимов типов (generic type alias) — псевдоним типа может быть параметризирован, как и впервые определяемый тип (при определении псевдонима типа теперь допускается указание параметров типа);

внесены оптимизации в runtime, которые привели к снижению нагрузки на процессор на 2–3% при проведении типовых тестов производительности. Среди внесённых оптимизаций: новая встроенная реализация операции map, основанная на использовании хэш‑таблиц Swiss Table; повышение эффективности использования памяти при размещении мелких объектов; новая реализация mutex, встроенная в runtime;

в команду go для Go‑модулей добавлен механизм отслеживания исполняемых зависимостей (вспомогательных инструментов, написанных на языке Go и используемых при разработке модуля, например, linter‑ов или утилит для форматирования кода). Определение утилит в файле go.mod производится через директиву tool, для добавления которой в текущий модуль предложена команда go get ‑tool (например, go get ‑tool golang.org/x/tools/cmd/stringer). Для запуска утилиты, указанной в директиве tool, добавлена команда «go tool имя_утилиты»;

в команды go build и go install добавлена опция ‑json для вывода в формате JSON;

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

в команде go vet реализован новый анализатор тестов (test analyzer), выявляющий типовые ошибки при включении тестов, fuzzing‑инструментов, утилит проверки производительности и примеров приложений;

в стандартную библиотеку включены реализации криптоалгоритмов, одобренных в стандарте безопасности FIPS 140–3;

в пакет testing добавлен метод B.Loop для выполнения тестов производительности. Применение for b.Loop() {... } вместо обычных циклов позволяет исключить выполнение компилятором полной оптимизации тела цикла и вынести из цикла стадии настройки и очистки теста;

добавлен тип os.Root, позволяющий изолировать операции с файловой системой заданным каталогом;

в runtime добавлен новый механизм финализации runtime.AddCleanup, более гибкий и эффективный, чем runtime.SetFinalizer;

добавлен пакет weak c реализацией слабых указателей, которые не владеют объектом, не увеличивают счётчик ссылок и не препятствуют освобождению объекта;

добавлены пакеты crypto/mlkem с реализацией криптоалгортимов ML‑KEM-768 и ML‑KEM-1024 (Kyber), стойких для подбора на квантовом компьютере; crypto/hkdf c реализацией функции формирования ключа на базе HMAC (RFC 5869); crypto/pbkdf2 c реализацией функции формирования ключа на базе пароля (PBKDF2, RFC 8018); crypto/sha3 c реализацией хэшей SHA-3;

добавлен экспериментальный пакет testing/synctest с функциями для тестирования многопоточности;

улучшена поддержка WebAssembly. Добавлена возможность сборки Go‑приложений в форме библиотеки или обработчика WASI (WebAssembly System Interface). Реализована директива go:wasmexport для экспорта функций для использования в WebAssembly;

в утилиту objdump добавлена поддержка дизассемблирования для архитектур LoongArch (GOARCH=loong64), RISC‑V (GOARCH=riscv64) и S390X (GOARCH=s390x).



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

DimonVideo
2025-02-12T14:50:06Z

Здесь находятся
всего 0. За сутки здесь было 0 человек
Яндекс.Метрика