A GCC 15.1 átáll a C23-ra, és C++ fejlesztéseket, optimalizálásokat és egyebeket tartalmaz.

gcc

Egy évnyi intenzív fejlesztés után, Bejelentették a «GCC 15.1» új verziójának megjelenését, amely a népszerű nyílt forráskódú fordítócsomag új 15.x ágának első stabil verziójaként van pozícionálva.

Ez a kiadás nemcsak hivatalosan is elindítja az új GCC 15 sorozatot, hanem a GCC 16 fejlesztésének előkészületeinek kezdetét is jelzi, mivel a 16.0 ág párhuzamosan elágazott, és lefekteti az alapokat a következő nagyobb kiadáshoz, a GCC 16.1-hez.

GCC 15.1 Főbb új funkciók

Az új verzió egyik legjelentősebb változása a GCC 15.1 átveszi a C23 szabványt alapértelmezettként a C kód fordításához, a -std=gnu23 opció használatával. Ez a frissítés felváltja a korábban alapértelmezés szerint használt C17 (-std=gnu17) szabványt, és az új szabvány számos új funkcióját vezeti be. Köztük van a konstans nullptr, _BitInt(n) típus, valamint a bool, true és false kulcsszavak, ami ütközéseket okozhat a meglévő azonosítókkal a korábbi kódban.

A GCC 15.1 egy másik új funkciója a következő: #embed direktíva bináris adatok beágyazásához, és olyan attribútumok, mint a nem szekvenciális és a reprodukálható, amelyek nagyobb kontrollt biztosítanak a végrehajtás sorrendje és a konzisztens eredmények meghatározása felett. Ezenkívül a jövőbeli C2Y szabvány elemeit is implementálták, például az if feltételeken belül deklarált változókat, az esetkijelöléses utasításokban szereplő értéktartományokat, az i és j képzetes utótagokat, valamint a komplex számokra alkalmazott ++ és — operátorok támogatását.

Fejlesztések a C++-ban és a jövőbeli C++26

A C++ nyelv esetében a program új verziója A GCC 15.1 olyan funkciókat valósít meg, amelyekről a C++26 szabványhoz jelenleg is szó esik, mivel új funkciók kerülnek bevezetésre, mint például a "friend" operátor, a constexpr használata az új operátor variánsaival, valamint a strukturált linkek és attribútumok szintaxisának fejlesztései, mint például a mustail a garantált farok rekurzióhoz.

A C++23 támogatás is bővült új exportálási szabályokkal, az ideiglenes objektumok kezelésének fejlesztéseivel, valamint az std és std.compat modulok kísérleti megvalósításával a libstdc++-ban. Ezenkívül a hatékonyabb sablonhashelési rendszernek köszönhetően megnőtt a biztonság az union inicializálás során, és javult a kódfordítás.

Új figyelmeztetések és fejlesztések a statikus elemzésben

Rendszer A statikus elemzés vizuális újratervezést kapott amely szimbólumokon keresztül emeli ki a problémákat, Tippek a C23-ra való migráláshoz és egy új libgdiagnostics könyvtár amely lehetővé teszi a diagnosztikai logika más projektekben való újrafelhasználását. A SARIF formátumú jelentések generálásának támogatása is bevezetésre került, megkönnyítve a modern kódelemző eszközökkel való integrációt.

at A meglévő figyelmeztetések hozzáadódnak az újakhoz, mint -Wanalyzer-undefined-behavior-ptrdiff a nem kapcsolódó mutatók közötti kivonások észlelése, –Wzáró szóköz és -Wvezető szóköz a felesleges szóközök jelzésére, és –Wheader-guard a fejlécbeillesztési védelmek hibáinak észlelésére.

Optimalizálás és támogatás

A figyelemre méltó optimalizálások közül LTO inkrementális fordítási módot tartalmaz (Link-Time Optimization), amelynek célja az újrafordítások felgyorsítása minimális változtatások esetén. Is a hurokvektorizáció javult, még azokban az esetekben is, amikor a tömbök mérete fordítási időben nem ismert, és növeli a nagyon nagy fájlok fordításának sebességét.

A támogatási oldalon az ARMv64 kiterjesztések hozzáadódtak az AArch8-hez, támogatás az új CPU-khoz, mint például az Apple M3, Cortex-X925 és NVIDIA Grace, valamint kiterjeszti a MinGW platformot. Az AMD Radeon GPU-k kódgenerálása megerősödött a következőkkel: Kísérleti támogatás az új GFX9, GFX10.3 és GFX11 sorozathoz. Az x86 architektúra esetében az AVX10.2 és az új AMX utasítások támogatása engedélyezve van, a Xeon Phi Knights támogatása pedig megszűnik.

Ezen túlmenően, A GCC 15.1 bevezet egy COBOL fordítót (gcobol), x86-64 és AArch64 architektúrák támogatásával, valamint a D nyelv frissített implementációjával (2.111.0 verzió). Hozzáadtuk az előjel nélküli egész számok támogatását Fortranban, és előrehaladtunk az OpenMP 5.0-ról 6.0-ra való átállásban, beleértve az interoperabilitási fejlesztéseket és az egységes memóriahasználatot a GPU-kon.