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