GCC 15.1 переходит на C23 и добавляет улучшения, оптимизации и многое другое для C++.

GCC

После года интенсивной разработки, анонсирован выход новой версии «GCC 15.1», которая позиционируется как первая стабильная версия в новой ветке 15.x этого популярного набора компиляторов с открытым исходным кодом.

Этот выпуск не только официально запускает новую серию GCC 15, но и знаменует начало подготовки к разработке GCC 16, поскольку ветка 16.0 была параллельно разделена и заложит основу для следующего крупного выпуска — GCC 16.1.

GCC 15.1 Основные новые функции

Одним из наиболее заметных изменений в этой новой версии является то, что GCC 15.1 принимает стандарт C23 по умолчанию для компиляции кода C, используя опцию -std=gnu23. Это обновление заменяет предыдущий стандарт, используемый по умолчанию, C17 (-std=gnu17), и вводит ряд новых функций нового стандарта. Среди них есть константа nullptr, тип _BitInt(n) и ключевые слова bool, true и false, что может вызвать конфликты с существующими идентификаторами в устаревшем коде.

Еще одна новая функция, которую включает GCC 15.1, — это Директива #embed для внедрения двоичных данных, и такие атрибуты, как непоследовательность и воспроизводимость, которые обеспечивают больший контроль над порядком выполнения и определением последовательных результатов. Кроме того, были реализованы элементы будущего стандарта C2Y, такие как переменные, объявленные в условиях if, диапазоны значений в операторах case, мнимые суффиксы i и j, а также поддержка операторов ++ и —, применяемых к комплексным числам.

Улучшения в C++ и будущее C++26

В случае языка C++ новая версия GCC 15.1 реализует функции, которые обсуждаются для стандарта C++26, по мере введения новых функций, таких как оператор «friend», использование constexpr с вариантами нового оператора и улучшения синтаксиса для структурированных ссылок и атрибутов, таких как musttail для гарантированной хвостовой рекурсии.

Также расширена поддержка C++23. с новыми правилами использования экспорта, улучшениями в обработке временных объектов и экспериментальной реализацией модулей std и std.compat в libstdc++. Кроме того, усилена безопасность инициализации объединения и улучшена компиляция кода благодаря более эффективной системе хеширования шаблонов.

Новые предупреждения и улучшения в статическом анализе

система Статический анализ получил визуальный редизайн который освещает проблемы с помощью символов, Советы по переходу на C23 и новая библиотека libgdiagnostics что позволяет повторно использовать диагностическую логику в других проектах. Также реализована поддержка создания отчетов в формате SARIF, что облегчает интеграцию с современными инструментами анализа кода.

в Существующие предупреждения добавляются к новым, как -Wanalyzer-неопределенное-поведение-ptrdiff для обнаружения вычитаний между несвязанными указателями, –Wконечный-пробел и -Wлидирующий-пробел для обозначения ненужных пробелов и –Wheader-guard для обнаружения ошибок в защите включения заголовков.

Оптимизации и поддержка

Среди заметных оптимизаций: Включен режим инкрементальной компиляции для LTO. (Оптимизация времени компоновки), предназначенная для ускорения перекомпиляции при минимальных изменениях. Также улучшена векторизация цикла, даже в случаях, когда размер массивов неизвестен во время компиляции, и увеличивает скорость компиляции очень больших файлов.

Что касается поддержки, то в AArch64 были добавлены расширения ARMv8, поддержка новых процессоров, таких как Apple M3, Cortex-X925 и NVIDIA Grace, а также расширяет платформу MinGW. Генерация кода для графических процессоров AMD Radeon улучшена с помощью Экспериментальная поддержка новых серий GFX9, GFX10.3 и GFX11. Для архитектуры x86 включена поддержка AVX10.2 и новых инструкций AMX, а поддержка Xeon Phi Knights прекращена.

Кроме того, GCC 15.1 представляет компилятор для COBOL (gcobol) с поддержкой архитектур x86-64 и AArch64, а также обновленной реализацией языка D (версия 2.111.0). Добавлена ​​поддержка беззнаковых целых чисел в Fortran, а также расширено внедрение OpenMP 5.0–6.0, включая улучшения взаимодействия и унифицированное использование памяти на графических процессорах.