GCC 15.1 skoči na C23 in doda izboljšave, optimizacije in še več v jeziku C++.

GCC

Po letu intenzivnega razvoja, Napovedana je bila izdaja nove različice »GCC 15.1«, ki je postavljena kot prva stabilna različica znotraj nove veje 15.x tega priljubljenega odprtokodnega prevajalnika.

Ta izdaja ne le uradno začenja novo serijo GCC 15, temveč tudi označuje začetek priprav na razvoj GCC 16, saj je bila veja 16.0 vzporedno razdeljena in bo postavila temelje za naslednjo večjo izdajo, GCC 16.1.

GCC 15.1 Glavne nove funkcije

Ena najpomembnejših sprememb v tej novi različici je GCC 15.1 sprejema standard C23 kot privzeto za prevajanje kode C, z uporabo možnosti -std=gnu23. Ta posodobitev nadomešča prejšnji standard, C17 (-std=gnu17), ki je bil privzeto uporabljen, in uvaja številne nove funkcije novega standarda. Med njimi je tudi konstanta nullptr, tip _BitInt(n) in ključne besede bool, true in false, kar bi lahko povzročilo konflikte z obstoječimi identifikatorji v starejši kodi.

Druga nova funkcija, ki jo vključuje GCC 15.1, je direktiva #embed za vdelavo binarnih podatkov, in atribute, kot sta nezaporedno in ponovljivo, ki omogočajo večji nadzor nad vrstnim redom izvajanja in določanjem doslednih rezultatov. Poleg tega so bili implementirani elementi prihodnjega standarda C2Y, kot so spremenljivke, deklarirane znotraj pogojev if, obsegi vrednosti v stavkih case, imaginarne pripone i in j ter podpora za operatorja ++ in —, uporabljena za kompleksna števila.

Izboljšave v C++ in prihodnji C++26

V primeru jezika C++ je nova različica GCC 15.1 implementira funkcije, o katerih se razpravlja za standard C++26, z uvedbo novih funkcij, kot so operator »friend«, uporaba constexpr z različicami novega operatorja in izboljšave sintakse za strukturirane povezave in atribute, kot je musttail za zagotovljeno repno rekurzijo.

Razširjena je tudi podpora za C++23 z novimi pravili za uporabo izvoza, izboljšavami pri ravnanju z začasnimi objekti in eksperimentalno implementacijo modulov std in std.compat v libstdc++. Poleg tega je varnost inicializacije združevanja okrepljena, prevajanje kode pa je izboljšano zaradi učinkovitejšega sistema zgoščevanja predlog.

Nova opozorila in izboljšave v statični analizi

Sistem Statična analiza je dobila vizualno prenovo ki s simboli izpostavlja težave, Nasveti za selitev na C23 in nova knjižnica libgdiagnostics kar omogoča ponovno uporabo diagnostične logike v drugih projektih. Uvedena je tudi podpora za ustvarjanje poročil v formatu SARIF, kar olajša integracijo s sodobnimi orodji za analizo kode.

At Obstoječa opozorila so dodana novim, kot -Wanalyzer-nedefinirano-vedenje-ptrdiff za zaznavanje odštevanj med nepovezanimi kazalci, –Zaključni presledki in vodilni presledki za označevanje nepotrebnih presledkov in –Zaščita glave za odkrivanje napak v zaščiti vključitve glave.

Optimizacije in podpora

Med opaznimi optimizacijami, Vključen je način inkrementalnega prevajanja za LTO (Optimizacija časa povezave), zasnovana za pospešitev ponovnih prevajanj, ko so spremembe minimalne. Tudi vektorizacija zanke je izboljšana, tudi v primerih, ko velikost polj v času prevajanja ni znana, in poveča hitrost prevajanja zelo velikih datotek.

Na strani podpore so bile v AArch64 dodane razširitve ARMv8, podpora za nove procesorje, kot je Apple M3, Cortex-X925 in NVIDIA Grace ter razširja platformo MinGW. Generiranje kode za grafične procesorje AMD Radeon je okrepljeno z Eksperimentalna podpora za nove serije GFX9, GFX10.3 in GFX11. Za arhitekturo x86 je omogočena podpora za AVX10.2 in nova navodila AMX, podpora za Xeon Phi Knights pa je ukinjena.

Poleg tega, GCC 15.1 uvaja prevajalnik za COBOL (gcobol) s podporo za arhitekturi x86-64 in AArch64 ter posodobljeno implementacijo jezika D (različica 2.111.0). Dodana je bila podpora za nepredznačena cela števila v Fortranu, sprejetje OpenMP 5.0 do 6.0 pa je bilo napredno, vključno z izboljšavami interoperabilnosti in poenoteno uporabo pomnilnika na grafičnih procesorjih.