GCC 15.1 bën kalimin në C23 dhe shton përmirësime, optimizime dhe më shumë në C++.

gcc

Pas një viti zhvillimi intensiv, u njoftua publikimi i versionit të ri të «GCC 15.1», i cili pozicionohet si versioni i parë i qëndrueshëm brenda degës së re 15.x të kësaj pakete të njohur përpiluesish me burim të hapur.

Ky version jo vetëm që lançon zyrtarisht serinë e re GCC 15, por shënon edhe fillimin e përgatitjeve për zhvillimin e GCC 16, pasi dega 16.0 është ndarë paralelisht dhe do të hedhë themelet për versionin e ardhshëm të madh, GCC 16.1.

GCC 15.1 Karakteristikat kryesore të reja

Një nga ndryshimet më të dukshme në këtë version të ri është se GCC 15.1 miraton standardin C23 si parazgjedhje për kompilimin e kodit C, duke përdorur opsionin -std=gnu23. Ky përditësim zëvendëson standardin e mëparshëm të përdorur si parazgjedhje, C17 (-std=gnu17), dhe prezanton një numër veçorish të reja të standardit të ri. Midis tyre është konstantja nullptr, tipi _BitInt(n), dhe fjalët kyçe bool, true dhe false, gjë që mund të shkaktojë konflikte me identifikuesit ekzistues në kodin e trashëguar.

Një tjetër veçori e re që përfshin GCC 15.1 është direktiva #embed për të ngulitur të dhëna binare, dhe atribute të tilla si të pasekuencuara dhe të riprodhueshme, të cilat ofrojnë kontroll më të madh mbi rendin e ekzekutimit dhe përcaktimin e rezultateve të qëndrueshme. Për më tepër, janë zbatuar elementë të standardit të ardhshëm C2Y, siç janë variablat e deklaruara brenda kushteve "if", diapazonet e vlerave në deklaratat "case", prapashtesat imagjinare i dhe j, dhe mbështetja për operatorët ++ dhe — të aplikuara në numrat kompleksë.

Përmirësime në C++ dhe C++26 e së ardhmes

Në rastin e gjuhës C++, versioni i ri i GCC 15.1 zbaton veçoritë që po diskutohen për standardin C++26, ndërsa prezantohen veçori të reja, të tilla si operatori "mik", përdorimi i constexpr me variante të operatorit të ri dhe përmirësime në sintaksën për lidhjet e strukturuara dhe atributet, të tilla si musttail për rekursion të garantuar të bishtit.

Mbështetja për C++23 është zgjeruar gjithashtu me rregulla të reja për përdorimin e eksportimit, përmirësime në trajtimin e objekteve të përkohshme dhe një implementim eksperimental të moduleve std dhe std.compat në libstdc++. Për më tepër, siguria është forcuar për inicializimin e bashkimit dhe përpilimi i kodit është përmirësuar falë një sistemi më efikas të hashimit të shablloneve.

Paralajmërime dhe përmirësime të reja në analizën statike

Sistem Analiza statike mori një ridizajnim vizual që nxjerr në pah problemet përmes simboleve, Këshilla për migrimin në C23 dhe një bibliotekë e re libgdiagnostics gjë që lejon ripërdorimin e logjikës diagnostikuese në projekte të tjera. Gjithashtu është prezantuar mbështetje për gjenerimin e raporteve në formatin SARIF, duke lehtësuar integrimin me mjetet moderne të analizës së kodit.

Paralajmërimet ekzistuese u shtohen atyre të rejave, si -Wanalyzer-undefined-behavior-ptrdiff për të zbuluar zbritjet midis treguesve të palidhur, –Hapësirë-e-bardhë-në-pas-pas dhe hapësirë-e-bardhë-në-për-pas-pas për të treguar hapësira të bardha të panevojshme, dhe –Mbrojtës i grurit për të zbuluar gabime në mbrojtjet e përfshirjes së header-ave.

Optimizime dhe mbështetje

Ndër optimizimet e dukshme, Përfshihet një modalitet kompilimi shtesë për LTO (Optimizimi i Kohës së Lidhjes), i projektuar për të përshpejtuar rikompilimet kur ndryshimet janë minimale. Gjithashtu vektorizimi i lakut është përmirësuar, edhe në rastet kur madhësia e vargjeve nuk dihet në kohën e kompajlimit, dhe rrit shpejtësinë e kompajlimit të skedarëve shumë të mëdhenj.

Nga ana e mbështetjes, zgjerimet ARMv64 janë shtuar në AArch8, mbështetje për CPU-të e reja si Apple M3, Cortex-X925 dhe NVIDIA Grace, dhe zgjeron platformën MinGW. Gjenerimi i kodit për GPU-të AMD Radeon është forcuar me Mbështetje eksperimentale për seritë e reja GFX9, GFX10.3 dhe GFX11. Për arkitekturën x86, është aktivizuar mbështetja për AVX10.2 dhe udhëzimet e reja AMX, dhe mbështetja për Xeon Phi Knights është ndërprerë.

Përveç kësaj, GCC 15.1 prezanton një kompajler për COBOL (gcobol), me mbështetje për arkitekturat x86-64 dhe AArch64, dhe një implementim të përditësuar të gjuhës D (versioni 2.111.0). Është shtuar mbështetje për numrat e plotë pa shenjë në Fortran dhe është avancuar miratimi i OpenMP 5.0 deri në 6.0, duke përfshirë përmirësime të ndërveprimit dhe përdorim të unifikuar të memories në GPU.