GCC 15 kompilaatorite komplekti vÀljaanne

PĂ€rast aasta arendust on vĂ€lja antud tasuta GCC 15.1 kompilaatorite komplekti versioon, mis on esimene mĂ€rkimisvÀÀrne vĂ€ljaanne uues GCC 15.x haru. VĂ€ljalaske numbrite sĂŒsteemi kohaselt kasutati arendusprotsessis versiooni 15.0 ning GCC 15.1 vĂ€ljalaskmise eel juba eraldus haru GCC 16.0, mille alusel moodustatakse jĂ€rgmine mĂ€rkimisvÀÀrne GCC 16.1 vĂ€ljaanne.

Peamised muudatused:

  • C keeles programmide kompileerimisel on vaikimisi aktiivne C23 standard (muudatuste ĂŒlevaade) koos GNU laiendustega („-std=gnu23”). Varem kasutati vaikimisi C17 standardit — „-std=gnu17”). Muudatus vĂ”ib potentsiaalselt pĂ”hjustada probleeme olemasolevate projektide kokkupanemisel, kuna see sisaldab konstanti nullptr, tĂŒĂŒpi _BitInt(n) ning vĂ”tmesĂ”nu bool, true ja false, mis vĂ”ivad konfliktida rakendustes mÀÀratud sama nimega identifikaatoritega.
  • C23 standardi vĂ”imalused on rakendatud:
    • Direktiiv „#embed”, mis on mĂ”eldud binaarsete ressursside koodis embedimiseks.
    • Atribuut „unsequenced”, mis nĂ€itab, et tulemus ei sĂ”ltu tĂ€itmise jĂ€rjestusest.
    • Atribuut „reproducible”, mis nĂ€itab, et funktsioon tagastab alati sama tulemuse, kui sisendid on samad, st ei sĂ”ltu teistest teguritest.
  • C2Y standardi elemendid (-std=c2y ja -std=gnu2y) on rakendatud:
    • Muuttuvate deklareerimise vĂ”imalus „if” lauses, nĂ€iteks „if (int x = get ()) {
}”.
    • TsĂŒklitele nimede andmise tugi, et neile koodis viidata. outer: for (int i = 0; i < IK; ++ i) { switch (i) { case 1: break; // hĂŒppab CONT1 juurde case 2: break outer; // hĂŒppab CONT2 juurde } // CONT1 } // CONT2
    • TĂ€isarvude valikute „case” lausetes vahemike mÀÀramise tugi, nĂ€iteks „case 1 
 10:”.
    • Sufiksid „i” ja „j” kompleksnumbrites imaginarse osa tĂ€histamiseks.
    • Kompleksnumbrites operaatorite „++” ja „—” kasutamise vĂ”imalus.
    • Konstruktsioon „_Generic(type, expr1, expr2, 
)”, mis valib vĂ€ljendi operandi tĂŒĂŒbi pĂ”hjal.
    • Byte-massiivide kĂ€sitlemise tugi kui teised objekti tĂŒĂŒbid, nagu struktuurid ja liidendid.
    • Operaatori „alignof” rakendamise tugi mittetĂ€ielikele massiividele (mille suurust ei ole mÀÀratud, nĂ€iteks „int a[]”).
    • Lisatud on uus sĂŒntaks kaheksandike, kuueteistkĂŒmnendike ja universaalsete escape-jĂ€rjestuste jaoks. „\u“, „\x“ ja „\nnn“ asemel on pakkuda jĂ€rjestused „\u{}“, „\o{}“ ja „\x{}“, kus saab mÀÀrata suvalise arvu numbreid.
    • Sisemised funktsioonid „__builtin_stdc_rotate_left“ ja „__builtin_stdc_rotate_right“.
    • Nullpikkusega operatsioonid NULL-viidikute kohta on lubatud (nĂ€iteks „sizeof(*p)“).
  • C++ keeles on esitatud front-endis tulevase C++26 standardi arendamise vĂ”imalused:
    • Muutuva arvu parameetrite operaator „friend“ („friend Ts
“).
    • VĂ”imalus kasutada „constexpr“ vĂ”tmesĂ”na „new“ operaatori erivariantiga (placement new) objekti asetamist eelnevalt eraldatud mĂ€llu kompileerimise ajal.
    • Veateate vĂ€ljastamine, kui kustutatakse viidik, mis osutab mittetĂ€ielikule tĂŒĂŒbile.
    • Mugavuse huvides on deklareeritud suhtes ettenĂ€htud sarnaste parameetrite defineerimise sĂŒntaks, kus enne kolme punkti pole koma (nĂ€iteks „void e(int
)“ asemel „void e(int, 
)“).
    • Parameetrite paketi indekseerimine ĆĄabloonides.
    • Atribuudid struktureeritud seondumiste jaoks;
    • SĂŒntaks „= delete(„pĂ”hjus“);“;
    • „@“, „$“ ja „`“ kaasamine baassĂŒmbolite kogumisse.
    • Makrode kasutamine moodulite deklareerimiseks on keelatud.
    • Struktureeritud seondumise (structured binding) kasutamise vĂ”imalus tingimustena if- ja switch-lauseis.
    • Otsese massiivi vĂ”rdlemise toetus on lĂ”petatud (nĂ€iteks „int arr1[5]; int arr2[5]; bool same = arr1 == arr2“).
    • Mehhanism „#embed“ binaarsete ressursside sisse embedimiseks.
    • Mugavused on klassifitseeritud nagu is_trivial.
  • C++23 vĂ”imalused on lisatud:
    • MĂ”nede „export“ direktiivi rakenduste keelamine ja „export {}“ kasutamise lubamine.
    • Ajutiste objektide eluea pikenemise tugi tsĂŒklites „for“, mis lĂ€bivad vahemikke.
  • Raamatukogus libstdc++ on rakendatud eksperimentaalne toetus std ja std.compat moodulitele.
  • Initsialiseerija „{0}“ kasutamine liidetes C ja C++ koodis ei taga kogu sisu puhastamist, vaid viib liidete esimese elemendi nullimiseni. Kogu liidu puhastamiseks tuleks kasutada C23 spetsifikatsioonis mÀÀratletud vĂ€ljendit „{}“ vĂ”i mÀÀrata valik „-fzero-init-padding-bits=unions“, et taastada vana kĂ€itumine.
  • Tehtud on toetuse lisamine «musttail» atribuudi ([[gnu::musttail]] ja [[clang::musttail]]) jaoks, et tagada garantiseeritud saba kutsed. Atribuut rakendub return avaldustes, kus toimub praeguse funktsiooni rekursiivne kutsumine, ja garanteerib, et selline kutsumine kasutab saba rekursiooni, kus ei jaotata tĂ€iendavat mĂ€lu virna (vĂ€lja arvatud mĂ€lu ammendamise risk vĂ€ga suure kutsumise arvu korral).
  • Tehtud on toetuse lisamine flag_enum atribuudi ([[gnu::flag_enum]] ja [[clang::flag_enum]]) jaoks, mida rakendatakse loenditele, et nĂ€idata, et sisu kasutatakse bititegevustes (vĂ€listab hoiatuse esitamise reĆŸiimis «-Wswitch»).
  • Lisatud on toetuse lisamine atribuudi «counted_by» jaoks, mille kaudu saab mÀÀrata struktuuri paindliku massiivi vĂ€lja, mis mÀÀrab elementide arvu. Atribuuti saab kasutada puutumatuse kontrollide efektiivsuse suurendamiseks.
  • Funktsioonidele on lisatud atribuut «nonnull_if_nonzero», mis mÀÀratleb, et mĂ”ned funktsiooni parameetrite pointerid vĂ”ivad vĂ”tta vÀÀrtuse NULL ainult juhul, kui mĂ”ni teine parameeter on null.
  • Lubatavad on laiendatud assembleri sisestused «asm (
.)» vĂ€ljaspool funktsioone. Assembleri sisestustes on lubatud kirjutada ĂŒle mĂ€lu virna punases tsoonis (ala virna tipus).
  • C++ koodi kompileerimist on kiirus suurem parendatud mallide hasheeringu tĂ”ttu.
  • Lisatud on uued optimeerimised. Tehtud on toetuse lisamine silmade vektoriseerimisele, kus on kood enneaegseteks vĂ€ljumisteks (nĂ€iteks break vĂ”i returni kaudu), isegi kui sellised silmad manipuleerivad dĂŒnaamiliselt jaotatud massiivide vĂ”i puutmete tegemisega, mille suurust ei ole kompileerimise ajal teada. Valides valiku «-O2» on lubatud mĂ”nede kergesti vektoriseeritavate silmade vektoriseerimine, mille osas puuduvad teated iteratsioonide arvu (tripcount) kohta.
  • Lisatud on inkrementeerimise optimeerimise reĆŸiim sidumisetapis (LTO, Link-Time Optimization), mis oluliselt vĂ€hendab uuesti kompileerimise aega LTO kasutamisel olukordades, kus on tehtud vĂ€ikeseid muudatusi koodis (muudetud ĂŒks funktsioon). Inkremendi reĆŸiimi lubamiseks on pakutud variant «-flto-incremental».
  • Parandatud vĂ€ga suurte sisendfailide kompileerimist. Tehtud veergude numbrite jĂ€lgimine, mis ĂŒletavad 4096. Parandatud vigade ja hoiatuste asukoha mÀÀramise tĂ€psust vĂ€ga suurtes failides.
  • Parandatud aruannete selgust probleemide diagnoosimisel. NĂ€iteks on probleemi tekkekohta tĂ€histatud sĂŒmboliga "⚠", muudetud C++ mallide vigade vĂ€ljundi paigutust, lisatud vihjeid standardile C23 ĂŒlemineku hĂ”lbustamiseks, ĂŒmber kujundatud vĂ€rviskeem. Lisatud vĂ”imalus diagnostika vĂ€ljundi genereerimiseks Sarif formaadis (-fdiagnostics-format=sarif-file).
  • Töötatud vĂ€lja raamatukogu libgdiagnostics, mis vĂ”imaldab integreerida oma projektidesse GCC, seotud diagnostiliste sĂ”numite vormindamisvĂ”imalusi (nt saab kasutada tsiteerimise, esiletĂ”stmise ja paranduste vihjete vahendeid).
  • Lisatud hoiatused "-Wtrailing-whitespace" ja "-Wleading-whitespace" lĂ”pprea ĂŒleliigsete ja algrea tĂ€iendavate tĂŒhikute tuvastamiseks.
  • Lisatud hoiatus "-Wheader-guard", et teavitada pealkirja makrode kaitse failide probleeme, et vĂ€ltida pealkirja faili korduvat kaasamist.
  • D keele front-end on uuendatud versioonini 2.111.0.
  • Fortran keele front-endis on lisatud toe andmine mĂ€rkumatute tĂ€isarvude jaoks.
  • Komplekti on lisatud COBOL-i kompilaator — gcobol, mis toetab platvorme x86-64 ja AArch64, ning ei ole mĂ”eldud kasutamiseks 32-bitistes sĂŒsteemides. Kompilaator rakendab ISO/IEC 1989:2023 spetsifikatsiooni ja lĂ€bib suure osa NIST CCVS/85 testidest.
  • JĂ€tkub OpenMP 5.0, 5.1, 5.2 ja 6.0 (Open Multi-Processing) standardite rakendamine, mis mÀÀratlevad API-d ja meetodite rakendamise viise paralleelse programmeerimise jaoks mitme tuumaga ja hĂŒbriidsĂŒsteemides (CPU+GPU/DSP) koos jagatud mĂ€lu ja vektorite plokkide (SIMD) kasutamisega. Lisatud tugi meta-direktiividele ja konstruktsioonidele tile, unroll, interop ja dispatch. MĂ”nede AMD ja NVIDIA GPU-de jaoks on lisatud ĂŒhtse jagatud mĂ€lu tugi (lĂŒlitatakse sisse unified_shared_memory direktiivi "requires" kaudu). Lisatud tugi vĂ€ljendile "self_maps".
  • AArch64 arhitektuuri taustal on lisatud MinGW (aarch64-w64-mingw32) platvormi tugi. Tehtud ĂŒle 20 ARM8 laienduse, parandatud ACLE (Arm C Language Extensions) laienduse tuge. On tehtud mitmeid parandusi koodigeneraatorisse. Lisatud CPU toete:
    • Apple A12 (apple-a12)
    • Apple M1 (apple-m1)
    • Apple M2 (apple-m2)
    • Apple M3 (apple-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 (grace)
    • NVIDIA Olympus (olympus)
    • Qualcomm Oryon-1 (oryon-1)
  • GPU AMD Radeon jaoks koodi genereerimise taustal (GCN) on lisatud libstdc++ teegi tugi ja katsetuslik tugi koodi genereerimiseks seadmete sarjadele gfx9-generic, gfx10-3-generic ja gfx11-generic.
  • x86 arhitektuuri tausta on lisatud Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS arhitektuurilaienemiste tugi. Lisatud on CPU Intel Diamond Rapids ja Xeon Phi tugi.
  • LoongArch ja AVR platvormide taustade vĂ”imalusi on laiendatud.
  • Nios II protsessorites kasutatava sihtaarchitektuuri nios2 tugi on eemaldatud. ABI ILP32 (-mabi=ilp32) tugi AArch64 portis on kuulutatud vananenuks ja eemaldatakse jĂ€rgmises olulisemas vĂ€ljaandes.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster