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

in #ru10 days ago

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

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

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

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

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

    type set[P comparable] = map[P]bool

  • Внесены оптимизации в 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).

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