Po roku intensywnego rozwoju, ogłoszono wydanie nowej wersji «GCC 15.1», która jest pozycjonowana jako pierwsza stabilna wersja w nowej gałęzi 15.x tego popularnego pakietu kompilatorów typu open source.
To wydanie nie tylko oficjalnie rozpoczyna nową serię GCC 15, ale także oznacza początek przygotowań do rozwoju GCC 16, ponieważ gałąź 16.0 rozwidla się równolegle i będzie stanowić podwaliny dla kolejnej głównej wersji, GCC 16.1.
GCC 15.1 Główne nowe funkcje
Jedną z najbardziej znaczących zmian w tej nowej wersji jest to, że GCC 15.1 przyjmuje standard C23 jako domyślne przy kompilowaniu kodu C, używając opcji -std=gnu23. Niniejsza aktualizacja zastępuje poprzedni standard używany domyślnie, C17 (-std=gnu17), i wprowadza szereg nowych funkcji nowego standardu. Wśród nich jest stała nullptr, typ _BitInt(n) i słowa kluczowe bool, true i false, co może powodować konflikty z istniejącymi identyfikatorami w starszym kodzie.
Kolejną nową funkcją wprowadzoną w GCC 15.1 jest Dyrektywa #embed służąca do osadzania danych binarnych, oraz atrybuty, takie jak brak kolejności i powtarzalność, które zapewniają większą kontrolę nad kolejnością wykonywania i ustalaniem spójnych wyników. Ponadto zaimplementowano elementy przyszłego standardu C2Y, takie jak zmienne deklarowane w warunkach if, zakresy wartości w poleceniach case, sufiksy urojone i oraz j, a także obsługę operatorów ++ i — stosowanych do liczb zespolonych.
Ulepszenia w C++ i przyszłym C++26
W przypadku języka C++ nowa wersja GCC 15.1 implementuje funkcje omawiane w standardzie C++26, w miarę wprowadzania nowych funkcji, takich jak operator „friend”, używania constexpr z wariantami nowego operatora oraz udoskonaleń składni dla łączy strukturalnych i atrybutów, takich jak musttail w celu zagwarantowania rekurencji ogonowej.
Rozszerzono także obsługę C++23 z nowymi zasadami korzystania z eksportu, usprawnieniami w obsłudze obiektów tymczasowych oraz eksperymentalną implementacją modułów std i std.compat w libstdc++. Dodatkowo wzmocniono bezpieczeństwo inicjalizacji unii, a kompilacja kodu została ulepszona dzięki wydajniejszemu systemowi haszowania szablonów.
Nowe ostrzeżenia i ulepszenia w analizie statycznej
System Analiza statyczna otrzymała nowy wygląd wizualny który uwypukla problemy za pomocą symboli, Wskazówki dotyczące migracji do C23 i nowej biblioteki libgdiagnostics co pozwala na ponowne wykorzystanie logiki diagnostycznej w innych projektach. Wprowadzono również obsługę generowania raportów w formacie SARIF, co ułatwia integrację z nowoczesnymi narzędziami do analizy kodu.
W Istniejące ostrzeżenia są dodawane do nowych, Jak -Wanalyzer-niezdefiniowane-zachowanie-ptrdiff do wykrywania odejmowań pomiędzy niezależnymi wskaźnikami, –Końcowa spacja i wiodąca spacja aby wskazać niepotrzebne odstępy i –Obrońca nagłówka w celu wykrycia błędów w zabezpieczeniach dołączania nagłówków.
Optymalizacje i wsparcie
Wśród godnych uwagi optymalizacji, Dodano tryb kompilacji przyrostowej dla LTO (Link-Time Optimization) ma na celu przyspieszenie ponownych kompilacji w przypadku minimalnych zmian. Również ulepszono wektoryzację pętlinawet w przypadkach, gdy rozmiar tablic nie jest znany w momencie kompilacji, i zwiększa szybkość kompilacji bardzo dużych plików.
Po stronie wsparcia rozszerzenia ARMv64 zostały dodane do AArch8, obsługa nowych procesorów, takich jak Apple M3, Cortex-X925 i NVIDIA Grace oraz rozszerza platformę MinGW. Generowanie kodu dla procesorów graficznych AMD Radeon zostało wzmocnione dzięki Eksperymentalne wsparcie dla nowych serii GFX9, GFX10.3 i GFX11. W przypadku architektury x86 włączono obsługę AVX10.2 i nowych instrukcji AMX, natomiast wycofano obsługę Xeon Phi Knights.
Ponadto, GCC 15.1 wprowadza kompilator dla języka COBOL (gcobol) ze wsparciem dla architektur x86-64 i AArch64 oraz zaktualizowaną implementacją języka D (wersja 2.111.0). Dodano obsługę liczb całkowitych bez znaku w języku Fortran, a także przyspieszono wdrażanie OpenMP 5.0 do 6.0, co obejmuje ulepszenia interoperacyjności i ujednolicone wykorzystanie pamięci na procesorach graficznych.