GCC 15.1 переходить на C23 та додає покращення, оптимізації та багато іншого в C++.

ПКУ

Після року інтенсивної розробки було оголошено про випуск нової версії "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 для вбудовування двійкових даних, а також атрибути, такі як unsequenced та reproducible, які забезпечують кращий контроль над порядком виконання та визначенням константних результатів. Крім того, було реалізовано елементи майбутнього стандарту C2Y, такі як змінні, оголошені в операторах if, діапазони значень в операторах case, уявні суфікси i та j, а також підтримка операторів ++ та —, що застосовуються до комплексних чисел.

Покращення в C++ та майбутній C++26

У випадку мови C++, нова версія GCC 15.1 реалізує функції, які обговорюються для стандарту C++26, оскільки вона вводить нові можливості, такі як оператор "friend", використання constexpr з варіантами нового оператора та покращення синтаксису для структурованих посилань та атрибутів, таких як musttail для гарантованої хвостової рекурсії.

Сумісність з C++23 також розширена завдяки новим правилам використання `export`, покращенням обробки тимчасових об'єктів та експериментальній реалізації модулів `std` та `std.compat` у `libstdc++`. Крім того, посилено безпеку ініціалізації об'єднанням та покращено компіляцію коду завдяки ефективнішій системі хешування шаблонів.

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

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

До існуючих попереджень додано нові , такі як – Wanalyzer-undefined-behavior-ptrdiff для виявлення віднімань між непов’язаними вказівниками, – Wtrailing-whitespace та -Wleading-whitespace для позначення непотрібних пробілів, та – 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, включаючи покращення сумісності та використання уніфікованої пам'яті графічного процесора.


Додати як пріоритетне джерело в Google