Pambuyo pa chaka cha chitukuko, GCC compiler suite yaulere GCC 15.1 yatulutsidwa, kutulutsidwa kwakukulu koyamba mu nthambi yatsopano ya GCC 15.x. Malinga ndi ndondomeko yowerengera manambala, mtundu wa 15.0 unagwiritsidwa ntchito panthawi ya chitukuko, ndipo posachedwa GCC 15.1 isanatulutsidwe, nthambi ya GCC 16.0 inali itafoledwa kale, yomwe idzakhala maziko a kumasulidwa kwakukulu kotsatira, GCC 16.1.
Zosintha zazikulu:
- Mukamapanga ma C23 muyezo (Change Summary) wokhala ndi zowonjezera za GNU ("-std=gnu23") amagwiritsidwa ntchito mwachisawawa. M'mbuyomu, muyezo wa C17 unkagwiritsidwa ntchito mokhazikika (-std=gnu17). Kusinthaku kungayambitse mavuto pomanga mapulojekiti omwe alipo chifukwa chophatikizira nullptr nthawi zonse, mtundu wa _BitInt(n), ndi mawu osakira a bool, owona, ndi onama, omwe amatha kutsutsana ndi zizindikiritso zotchulidwa m'mapulogalamu.
- Zotsatira zotsatirazi za muyezo wa C23 zakhazikitsidwa:
- Lamulo la "#embed" lapangidwa kuti liyike zida zamabina mu code.
- Khalidwe "losatsatiridwa", lomwe limasonyeza kuti zotsatira sizidalira dongosolo la kuphedwa.
- Chizindikiro cha "reproducible" chikuwonetsa kuti ntchitoyo nthawi zonse imabweretsa zotsatira zomwezo zitaperekedwanso chimodzimodzi, mwachitsanzo, sizitengera zinthu zina.
- Zinthu zam'tsogolo za C2Y zakhazikitsidwa (-std=c2y ndi -std=gnu2y):
- Kutha kulengeza zosinthika mu mawu akuti "ngati", monga "ngati (int x = kupeza ()) {...}".
- Kuthandizira kutchula malupu kuti awatchule mu code. kunja: kwa (int i = 0; i < IK; ++ i) {kusintha (i) { mlandu 1: kuswa; // kulumphira ku CONT1 mlandu 2: kutuluka kunja; // kulumpha ku CONT2} // CONT1} // CONT2
- Thandizo lofotokozera milingo yamagulu onse pamawu, monga "mlandu 1...10:".
- Ma suffixes "i" ndi "j" kutanthauza gawo longoyerekeza mu manambala ovuta.
- Kuthekera kwa ogwiritsa ntchito "++" ndi "—" okhala ndi manambala ovuta.
- "_Generic(mtundu, expr1, expr2, ...)" amamanga posankha mawu otengera mtundu wa operand.
- Thandizo lofikira ma byte arrays monga mitundu ina ya zinthu, monga zomanga ndi mabungwe.
- Kuthandizira kugwiritsa ntchito opareshoni ya "alignof" kumagulu osakwanira (omwe adalengezedwa popanda kufotokoza kukula kwake, monga "int a[]").
- Onjezani mawu atsopano a octal, hexadecimal, ndi njira zopulumukira zapadziko lonse lapansi. M'malo mwa "\u", "\x" ndi "\nn", ndandanda "\u{}", "\o{}" ndi "\x{}" ikuperekedwa, momwe chiwerengero chilichonse cha manambala chingatchulidwe.
- Ntchito zomangidwa "__builtin_stdc_rotate_left" ndi "__builtin_stdc_rotate_right".
- Ntchito zautali wa ziro pa zolozera za NULL ndizololedwa (mwachitsanzo "sizeof(*p)").
- Kutsogolo kwa chilankhulo cha C ++ kumagwiritsa ntchito zinthu zomwe zikupangidwira mtsogolo C++26 muyezo:
- "Bwenzi" ("bwenzi Ts ...".
- Kutha kugwiritsa ntchito mawu ofunikira a constexpr ndi kusinthika kwa wogwiritsa ntchito watsopano (kuyika kwatsopano) kuti aike chinthu m'makumbukidwe omwe adapatsidwa kale panthawi yophatikiza.
- Kutulutsa kolakwika pochotsa cholozera ku mtundu wosakwanira.
- Mawu ofotokozera magawo osiyanasiyana okhala ndi ellipsis popanda koma (mwachitsanzo, potchula "void e(int...)" m'malo mwa "void e(int, ...)") adachotsedwa.
- Kulozera phukusi la parameter mu ma templates.
- Zomwe zimapangidwira zomangira;
- Syntax '= delete("chifukwa")';
- Kuphatikizika kwa "@", "$" ndi "`" m'magawo oyambira.
- Kugwiritsa ntchito macros kulengeza ma module ndikoletsedwa.
- Kutha kugwiritsa ntchito zomangira zokhazikika ngati chikhalidwe ndikusintha ziganizo.
- Thandizo la kufananitsa kwachindunji (mwachitsanzo "int arr1[5]; int arr2[5]; bool same = arr1 == arr2") kwathetsedwa.
- Njira ya "#embed" yoyika zida zamabina.
- Kalasi ya is_trivial template yachotsedwa ntchito.
- Zowonjezera C++23:
- Musalole kugwiritsa ntchito zina mwa malangizo a "export" ndikulola kugwiritsa ntchito "export {}".
- Thandizo lokulitsa nthawi ya moyo wa zinthu zosakhalitsa pa malupu omwe amapitilira milingo.
- Laibulale ya libstdc++ imagwiritsa ntchito zoyeserera zama module a std ndi std.compat.
- Kugwiritsa ntchito "{0}" koyambitsa migwirizano mu kachidindo ya C ndi C++ sikutsimikiziranso kuti zonse zomwe zili mkatizo zachotsedwa, koma m'malo mwake zimapangitsa kuti gawo loyamba la mgwirizano lichotsedwe. Kuti muchotse mgwirizano wonse, gwiritsani ntchito mawu akuti "{}" omwe akufotokozedwa mwatsatanetsatane wa C23, kapena tchulani njira ya "-fzero-init-padding-bits=unions" kuti mubwezeretse machitidwe akale.
- Thandizo lokhazikitsidwa la "musttail" ([[gnu::musttail]] ndi [[clang::musttail]]) pamayimbidwe otsimikizika. Chikhumbochi chikugwiritsidwa ntchito pobwezera mawu omwe amachititsa kuyitana kobwerezabwereza ku ntchito yamakono, ndikuwonetsetsa kuti kuyitana koteroko kudzagwiritsa ntchito kubwereza kwa mchira, komwe sikumapereka kukumbukira kowonjezera pa stack (kuchotsa chiwopsezo cha kutha kukumbukira ndi chiwerengero chachikulu cha mafoni).
- Thandizo lothandizira chizindikiro cha flag_enum ([[gnu::flag_enum]] ndi [[clang::flag_enum]]) zogwiritsidwa ntchito powerengera kusonyeza kuti zomwe zili mkatizi zimagwiritsidwa ntchito pang'onopang'ono (zimaletsa machenjezo mu -Wswitch mode).
- Thandizo lowonjezera la "counted_by", lomwe lingagwiritsidwe ntchito kutchula gawo mumpangidwe wokhala ndi gulu losinthika lomwe limatsimikizira kuchuluka kwa zinthu. Malingaliro atha kugwiritsidwa ntchito kuwongolera magwiridwe antchito a buffer kusefukira.
- Kuwonjezedwa kwa "nonnull_if_nonzero" ku magwiridwe antchito, omwe amatanthawuza kuti magawo ena ogwira ntchito okhala ndi zolozera amatha kukhala NULL pokhapokha ngati gawo lina lili ziro.
- Zowonjezera zophatikiza "asm(….)" ntchito zakunja ndizololedwa. Pazophatikizira zophatikizira, zimaloledwa kulembera kukumbukira kumalo ofiira a stack (malo omwe ali pamwamba pa stack).
- Kuphatikizika kwa kachidindo ka C++ kumathamanga kwambiri chifukwa cha kuwongolera kwa template.
- Anawonjezera kukhathamiritsa kwatsopano. Thandizo lakhazikitsidwa pa ma vectorizing malupu omwe ali ndi ma code otuluka msanga (mwachitsanzo, kudzera pa nthawi yopuma kapena kubwereranso), ngakhale ngati malupu oterowo asintha magawo kapena mabafa omwe kukula kwake sikudziwika panthawi yophatikiza. Kusankha kwa -O2 kukakhala kutchulidwa, kuyika ma loops osavuta kuphatikizika omwe chidziwitso cha tripcount palibe chimayatsidwa.
- Njira yowonjezera yowonjezera pagawo lolumikizira (LTO, Link-Time Optimization), yomwe imachepetsa kwambiri nthawi yobwezera mukamagwiritsa ntchito LTO munthawi yomwe kusintha kwakung'ono kwapangidwa pama code (ntchito imodzi yasinthidwa). Kuti mutsegule mawonekedwe owonjezera, njira "-flto-incremental" ikuperekedwa.
- Kuphatikiza kwabwino kwamafayilo akulu kwambiri olowetsa. Kutsata kotsata manambala amzati zazikulu kuposa 4096. Kuwongolera kulondola kwazomwe zili zolakwika ndi machenjezo m'mafayilo akulu kwambiri.
- Kuwoneka bwino kwa malipoti pozindikira zovuta. Mwachitsanzo, malo avuto amawunikidwa ndi chizindikiro cha "⚠️", masanjidwe a zotulukapo zolakwika mu ma tempuleti a C ++ asinthidwa, malingaliro awonjezedwa kuti muchepetse kusintha kwa C23, ndipo chiwembu chamitundu chakonzedwanso. Adawonjezera kuthekera kotulutsa zowunikira mumtundu wa Sarif (-fdiagnostics-format=sarif-file).
- Laibulale ya libgdiagnostics yakhazikitsidwa, kukulolani kuti muphatikize maluso a GCC okhudzana ndi kapangidwe ka mauthenga ozindikira matenda m'mapulojekiti anu (mwachitsanzo, mutha kugwiritsa ntchito mawu, kuwunikira, ndi malingaliro owongolera).
- Machenjezo owonjezera "-Wtrailing-whitespace" ndi "-Wleading-whitespace" kuti azindikire malo oyera otsalira kumapeto kwa mizere ndi malo oyera owonjezera kumayambiriro kwa mizere.
- Chenjezo lowonjezera la "-Wheader-guard" kuti lifotokoze zovuta mu ma macros oteteza mutu omwe amalepheretsa fayilo yamutu kuti isaphatikizidwenso.
- Kutsogolo kwa chilankhulo cha D kusinthidwa kukhala mtundu wa 2.111.0.
- Thandizo la manambala osasayina awonjezedwa ku Fortran frontend.
- Phukusili limaphatikizapo chojambulira cha chinenero cha COBOL, gcobol, chomwe chimathandizira nsanja za x86-64 ndi AArch64 ndipo sizinapangidwe kuti zigwiritsidwe ntchito pa machitidwe a 32-bit. Wopangayo amagwiritsa ntchito ISO/IEC 1989:2023 ndipo amapambana mayeso ambiri a NIST CCVS/85.
- Kukhazikitsidwa kwa miyezo ya OpenMP 5.0, 5.1, 5.2 ndi 6.0 (Open Multi-Processing), kufotokozera API ndi njira zogwiritsira ntchito njira zofananira zamapulogalamu pamakina amitundu yambiri komanso osakanizidwa (CPU + GPU/DSP) okhala ndi mayunitsi ogawana kukumbukira ndi ma vectorization (SIMD), kwapitilira. Thandizo lowonjezera la ma metadirectives ndi matayala, kumasula, interop ndi kutumiza zomanga. Kwa ma AMD ndi NVIDIA GPUs, kuthandizira kukumbukira kogwirizana kophatikizidwa kwawonjezedwa (kuthandizidwa ndi kutchula unified_shared_memory mu "mafunika" malangizo). Anawonjezera chithandizo cha mawu a "self_maps".
- Kumbuyo kwa zomangamanga za AArch64 zasinthidwa kuti zithandizire nsanja ya MinGW (aarch64-w64-mingw32). Zowonjezera zoposa 20 za ARM8 zakhazikitsidwa ndipo chithandizo cha ACLE (Arm C Language Extensions) chawongoleredwa. Zosintha zambiri zapangidwa pa jenereta yamakhodi. Thandizo la CPU lowonjezera:
- Apple A12 (apulo-a12)
- Apple M1 (apulo-m1)
- Apple M2 (apulo-m2)
- Apple M3 (apulo-m3)
- Arm Cortex-A520AE (cortex-a520ae)
- Arm Cortex-A720AE (cortex-a720ae)
- Arm Cortex-A725 (cortex-a725)
- Arm Cortex-R82AE (cortex-r82ae)
- Arm Cortex-X925 (cortex-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)
- AMD Radeon GPU (GCN) code generation backend yasinthidwa kuti ithandizire laibulale ya libstdc++ ndipo chithandizo choyesera chopangira ma code awonjezedwa pazida za gfx9-generic, gfx10-3-generic, ndi gfx11-generic.
- The x86 backend tsopano imathandizira ma Intel instruction set architecture extensions AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. Thandizo lowonjezera la Intel Diamond Rapids ndi Xeon Phi CPUs.
- Kuthekera kwakumapeto kwa nsanja za LoongArch ndi AVR.
- Kuchotsa kuthandizira kwa zomangamanga za nios2 zomwe zimagwiritsidwa ntchito mu Nios II processors. Thandizo la ILP32 ABI (-mabi=ilp32) padoko la AArch64 latsitsidwa ndipo lichotsedwa pakatulutsidwa kotsatira.
Source: opennet.ru
