Eftir árs þróun hefur ókeypis GCC þýðandasvítan GCC 15.1 verið gefin út, fyrsta stóra útgáfan í nýju GCC 15.x útibúinu. Samkvæmt útgáfunúmerakerfinu var útgáfa 15.0 notuð við þróun, og skömmu fyrir útgáfu GCC 15.1 hafði grein af GCC 16.0 þegar verið gaffalin, sem mun mynda grunninn að næstu stóru útgáfu, GCC 16.1.
Helstu breytingar:
- Þegar C forrit eru sett saman er C23 staðallinn (Change Summary) með GNU viðbótum ("-std=gnu23") notaður sjálfgefið. Áður var C17 staðallinn notaður sjálfgefið (-std=gnu17). Breytingin gæti hugsanlega valdið vandræðum þegar verið er að byggja fyrirliggjandi verkefni vegna þess að núllptr fastan, _BitInt(n) gerðin og bool, true og false leitarorðin eru tekin með, sem gætu stangast á við sams konar auðkenni sem eru skilgreind í forritum.
- Eftirfarandi eiginleikar C23 staðalsins hafa verið innleiddir:
- "#embed" tilskipunin er hönnuð til að fella inn tvöfaldar auðlindir í kóða.
- "Óraðað" eigindin, sem gefur til kynna að niðurstaðan sé ekki háð framkvæmdaröðinni.
- "Reproducible" eiginleiki gefur til kynna að fallið skilar alltaf sömu niðurstöðu með sama inntak, þ.e.a.s. er ekki háð öðrum þáttum.
- Hlutar framtíðar C2Y staðalsins hafa verið innleiddir (-std=c2y og -std=gnu2y):
- Geta til að lýsa yfir breytum í "ef" setningu, eins og "if (int x = fá ()) {...}".
- Stuðningur við að nefna lykkjur til að vísa til þeirra í kóða. ytri: for (int i = 0; i < IK; ++ i) { switch (i) { case 1: break; // hoppar til CONT1 tilvik 2: brot ytra; // hoppar í CONT2 } // CONT1 } // CONT2
- Stuðningur við að tilgreina svið heiltölugilda í fallatjáningum, svo sem „tilfelli 1...10:“.
- Viðskeytin „i“ og „j“ til að tákna ímyndaða hlutann í tvinntölum.
- Möguleiki á að nota „++“ og „—“ aðgerðirnar með flóknum tölum.
- "_Generic(type, expr1, expr2, …)" til að velja tjáningu sem byggist á operandagerðinni.
- Stuðningur við að fá aðgang að bætifylki eins og aðrar gerðir hlutar, svo sem mannvirki og stéttarfélög.
- Stuðningur við að beita "alignof" stjórnandanum á ófullnægjandi fylki (þær sem lýst er upp án þess að tilgreina stærð, eins og "int a[]").
- Bætt við nýrri setningafræði fyrir áttunda, sextánda og alhliða stafsetningarraðir. Í stað „\u“, „\x“ og „\nnn“ eru raðirnar „\u{}“, „\o{}“ og „\x{}“ lagðar til, þar sem hægt er að tilgreina hvaða fjölda tölustafa sem er.
- Innbyggðu föllin "__builtin_stdc_rotate_left" og "__builtin_stdc_rotate_right".
- Núlllengdaraðgerðir á NULL bendilum eru leyfðar (t.d. "sizeof(*p)").
- Framenda fyrir C++ tungumálið útfærir eiginleika sem verið er að þróa fyrir framtíðar C++26 staðal:
- Breytilegur rekstraraðili "vinur" ("vinur Ts...").
- Hæfni til að nota constexpr leitarorðið með afbrigðum af nýja stjórnandanum (nýtt staðsetning) til að setja hlut í fyrirfram úthlutað minni á samsetningartíma.
- Villa kom upp þegar bendill var eytt á ófullkomna gerð.
- Setningafræðin til að skilgreina breytubreytur með sporbaug án undanfarandi kommu (til dæmis þegar tilgreint er „void e(int…)“ í stað „void e(int, …)“ hefur verið úrelt.
- Skráning á færibreytupakka í sniðmátum.
- Eiginleikar fyrir skipulagðar bindingar;
- Setningafræði '= delete("ástæða")';
- Innifalið „@“, „$“ og „`“ í grunnstafasettinu.
- Notkun fjölva til að lýsa yfir einingar er bönnuð.
- Hæfni til að nota skipulagða bindingu sem skilyrði í ef og skipta yfirlýsingar.
- Stuðningur við beinan fylkissamanburð (t.d. "int arr1[5]; int arr2[5]; bool same = arr1 == arr2") hefur verið hætt.
- "#embed" vélbúnaðurinn til að fella inn tvöfaldar auðlindir.
- is_trivial sniðmátsflokkurinn hefur verið úreltur.
- Bætt við C++23 eiginleikum:
- Bannaðu suma notkun "útflutnings" tilskipunarinnar og leyfðu notkun "útflutnings {}".
- Stuðningur við að lengja líftíma tímabundinna hluta fyrir lykkjur sem endurtaka sig yfir svið.
- libstdc++ bókasafnið útfærir tilraunastuðning fyrir std og std.compat einingarnar.
- Notkun "{0}" frumstilli fyrir einingar í C og C++ kóða tryggir ekki lengur að allt innihald sé hreinsað, heldur leiðir það til þess að fyrsti þáttur sambandsins er núllaður út. Til að hreinsa allt sambandið, notaðu "{}" tjáninguna sem er skilgreind í C23 forskriftinni, eða tilgreindu "-fzero-init-padding-bits=unions" valkostinn til að endurheimta gamla hegðun.
- Innleiddur stuðningur við "musttail" eigindina ([[gnu::musttail]] og [[clang::musttail]]) fyrir tryggð halakall. Eigindin á við um skilasetningar sem kalla afturkvæmt til núverandi falls og tryggir að slíkt kall noti tail recursion, sem úthlutar ekki viðbótarminni á staflann (útrýma hættunni á að klárast minni með mjög miklum fjölda kalla).
- Innleiddur stuðningur við flag_enum eigindina ([[gnu::flag_enum]] og [[clang::flag_enum]]) notaður við upptalningar til að gefa til kynna að innihaldið sé notað í bitaaðgerðum (kemur í veg fyrir viðvaranir í -Wswitch ham).
- Bætti við stuðningi við "counted_by" eigindina, sem hægt er að nota til að tilgreina reit í uppbyggingu með sveigjanlegu fylki sem ákvarðar fjölda staka. Eigindin er hægt að nota til að bæta skilvirkni yfirflæðiseftirlits í biðminni.
- „nonnull_if_nonzero“ eigindinni bætt við föll, sem tilgreinir að sumar aðgerðafæribreytur með ábendingum geta aðeins verið NULL ef önnur færibreyta er núll.
- Útvíkkuð assembler innfelling "asm(….)" utanaðkomandi aðgerðir eru leyfðar. Í assembler innskotum er leyfilegt að skrifa yfir minni í rauða svæði staflans (svæðið efst á staflanum).
- Samantekt á C++ kóða er hraðari þökk sé bættri sniðmátskássa.
- Bætt við nýjum hagræðingum. Stuðningur hefur verið útfærður fyrir vektorunarlykkjur sem innihalda kóða fyrir snemmútgang (til dæmis með hléi eða bakkalli), jafnvel þó að slíkar lykkjur ráði við kraftmikið úthlutað fylki eða biðminni sem er óþekkt að stærð þeirra sé óþekkt á tímasetningu. Þegar valmöguleikinn -O2 er tilgreindur er virkjað virkjað á sumum lykkjum sem auðvelt er að vektorisera og þar sem upplýsingar um tripcount eru ekki tiltækar.
- Bætt við stigvaxandi fínstillingarham á tengingarstigi (LTO, Link-Time Optimization), sem dregur verulega úr endursamsetningartíma þegar LTO er notað í aðstæðum þar sem minniháttar breytingar hafa verið gerðar á kóðanum (einni aðgerð hefur verið breytt). Til að virkja stigvaxandi ham er valkosturinn "-flto-incremental" lagður til.
- Bætt samantekt á mjög stórum inntaksskrám. Innleitt mælingar á dálkanúmerum sem eru stærri en 4096. Bætt nákvæmni til að gefa upp staðsetningu villna og viðvarana í mjög stórum skrám.
- Bættur sýnileiki skýrslna við greiningu vandamála. Til dæmis er staðsetning vandamálsins auðkennd með „⚠️“ tákninu, útliti úttaksins fyrir villur í C++ sniðmátum hefur verið breytt, vísbendingum hefur verið bætt við til að einfalda umskiptin yfir í C23 staðalinn og litasamsetningin hefur verið endurhannuð. Bætti við getu til að gefa út greiningar á Sarif sniði (-fdiagnostics-format=sarif-skrá).
- libgdiagnostics bókasafnið hefur verið innleitt, sem gerir þér kleift að samþætta GCC getu sem tengist hönnun greiningarskilaboða inn í verkefnin þín (til dæmis geturðu notað tilvitnanir, auðkenningu og leiðréttingarvísbendingar).
- Bætt við "-Wtrailing-whitespace" og "-Wleading-whitespace" viðvörunum til að greina leifar af hvítu bili í lok lína og auka hvítbil í upphafi lína.
- Bætt við "-Wheader-guard" viðvörun til að tilkynna vandamál í hausvarnarfjölvum sem koma í veg fyrir að hausskrá sé tekin með aftur.
- Framenda fyrir D tungumálið hefur verið uppfært í útgáfu 2.111.0.
- Stuðningur við óundirritaðar heiltölur hefur verið bætt við Fortran framenda.
- Pakkinn inniheldur þýðanda fyrir COBOL tungumálið, gcobol, sem styður x86-64 og AArch64 pallana og er ekki hannað til notkunar á 32 bita kerfum. Þjálfarinn útfærir ISO/IEC 1989:2023 forskriftina og stenst flest NIST CCVS/85 prófin.
- Innleiðingu OpenMP 5.0, 5.1, 5.2 og 6.0 (Open Multi-Processing) staðla, sem skilgreinir API og aðferðir til að beita samhliða forritunaraðferðum á fjölkjarna og blendingum (CPU+GPU/DSP) kerfum með sameiginlegu minni og vektoriseringareiningum (SIMD), hefur verið haldið áfram. Bætti við stuðningi við metadirectives og flísar, unroll, interoper og sendingarbyggingar. Fyrir sumar AMD og NVIDIA GPUs hefur stuðningi við sameinað samnýtt minni verið bætt við (virkjað með því að tilgreina unified_shared_memory í "requires" tilskipuninni). Bætti við stuðningi við „self_maps“ tjáninguna.
- Bakendinn fyrir AArch64 arkitektúrinn hefur verið uppfærður til að styðja við MinGW vettvang (aarch64-w64-mingw32). Meira en 20 ARM8 viðbætur hafa verið innleiddar og stuðningur við ACLE (Arm C Language Extensions) viðbætur hefur verið bættur. Fjölmargar endurbætur hafa verið gerðar á kóðarafallinu. Bætt við CPU stuðning:
- Apple A12 (apple-a12)
- Apple M1 (epli-m1)
- Apple M2 (epli-m2)
- Apple M3 (epli-m3)
- Armur Cortex-A520AE (cortex-a520ae)
- Armur Cortex-A720AE (cortex-a720ae)
- Armur Cortex-A725 (berki-a725)
- Armur Cortex-R82AE (cortex-r82ae)
- Armberki-X925 (berki-x925)
- Arm Neoverse N3 (neoverse-n3)
- Arm Neoverse V3 (neoverse-v3)
- Arm Neoverse V3AE (neoverse-v3ae)
- FUJITSU-MONAKA (fujitsu-monaka)
- NVIDIA Grace
- NVIDIA Olympus (olympus)
- Qualcomm Oryon-1 (Oryon-1)
- Bakendi AMD Radeon GPU (GCN) kóðaframleiðslunnar hefur verið uppfærður til að styðja við libstdc++ bókasafnið og stuðningi við gerð tilraunakóða hefur verið bætt við fyrir gfx9-generic, gfx10-3-generic, og gfx11-generic device series.
- x86 bakendinn styður nú Intel kennslusett arkitektúr viðbætur AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. Bætti við stuðningi við Intel Diamond Rapids og Xeon Phi örgjörva.
- Aukinn stuðningur fyrir LoongArch og AVR palla.
- Fjarlægði stuðning fyrir nios2 markarkitektúr sem notaður er í Nios II örgjörvum. Stuðningur við ILP32 ABI (-mabi=ilp32) í AArch64 tenginu hefur verið úreltur og verður fjarlægður í næstu stóru útgáfu.
Heimild: opennet.ru
