Домой Софт macOS и Linux Вышел GCC 16.1: новые стандарты и поддержка процессоров

Вышел GCC 16.1: новые стандарты и поддержка процессоров

Новая версия набора компиляторов GCC 16.1 приносит поддержку современных стандартов C++, улучшенную векторизацию и расширенную аппаратную совместимость.

Вышел GCC 16.1: новые стандарты и поддержка процессоров
Вышел GCC 16.1: новые стандарты и поддержка процессоров — иллюстрация к материалу. Источник: linux.org.ru

После года активной разработки состоялся релиз свободного набора компиляторов GCC 16.1. Это первый стабильный выпуск в рамках новой ветки 16.x. Согласно устоявшейся традиции нумерации, версия 16.0 использовалась в процессе подготовки релиза, а незадолго до выхода 16.1 проект перешел к формированию кодовой базы для будущего GCC 17.0.

Основные изменения и улучшения

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

Языки и стандарты

  • C++ по умолчанию: Стандарт C++20 (диалект GNU C++20, -std=gnu++20) стал основным режимом работы компилятора, заменив C++17. Стабильность реализации C++20 в стандартной библиотеке официально подтверждена.
  • Экспериментальный Алгол 68: В состав GCC включен фронтэнд ga68 для работы с языком программирования Алгол 68.
  • Поддержка C++26: Добавлена экспериментальная поддержка ключевых возможностей будущего стандарта C++26:
    • Рефлексия: Внедрена функциональность (-freflection) для анализа и модификации структуры программы на этапе компиляции с помощью новых операторов ^^ и [: …:], а также библиотеки std::meta.
    • Контрактное программирование: Введены операторы pre (предусловие), post (постусловие) и contract_assert для формальной верификации интерфейсов.
    • Template for: Реализована конструкция для циклической обработки метаобъектов и параметров шаблонов во время компиляции.
    • Библиотеки: Появились std::simd для эффективной работы с AVX-512 и NEON, а также новые типы: std::inplace_vector, std::optional, std::copyable_function, std::function_ref, std::indirect, std::polymorphic и std::owner_equal.
  • Развитие стандартов C23, OpenMP и OpenACC: Расширена поддержка стандарта C23 (в частности, атрибут counted_by для контроля указателей). Обновлены реализации параллельных вычислений OpenMP (включая версию 6.0) и OpenACC (3.0–3.4) для работы с гибридными системами CPU+GPU.

Диагностика и оптимизация

  • Форматы вывода: Добавлена возможность генерации диагностических сообщений в HTML-формате. Взамен устаревшего JSON-формата для SARIF расширен объем данных, передаваемых в этом стандарте.
  • LTO и векторизация: Улучшены оптимизации на этапе связывания (LTO) с новой эвристикой -flto-toplevel-asm-heuristics. Техника спекулятивной девиртуализации теперь работает не только с виртуальными методами, но и с любыми косвенными вызовами. Также оптимизирована векторизация циклов с неизвестным числом итераций и досрочными выходами.

Поддержка аппаратных архитектур

Обновления затронули бэкенды для широкого спектра процессоров:

  • x86: Добавлена поддержка архитектур AMD Zen6 (-march=znver6), Intel Wildcat Lake и Nova Lake.
  • GPU: В бэкенде AMD Radeon (GCN) появилась поддержка ускорителей Instinct MI300 (gfx942).
  • Специализированные типы: Для RISC-V, ARM, S/390 и LoongArch реализована поддержка _BitInt(N) для работы с целыми числами произвольной битовой ширины.
Источник: https://www.linux.org.ru