Rakirina komîteya berhevkerê GCC 15

Piştî salek pêşkeftinê, pakêta berhevkerê GCC ya belaş GCC 15.1 hate berdan, yekem serbestberdana mezin di şaxê nû ya GCC 15.x de. Li gorî pilana jimarekirina berdanê, guhertoya 15.0 di dema pêşkeftinê de hate bikar anîn, û demek kin berî serbestberdana GCC 15.1, şaxek GCC 16.0 berê hatibû veqetandin, ku dê bingeha serbestberdana mezin a din, GCC 16.1 pêk bîne.

Guhertinên sereke:

  • Dema ku bernameyên C-yê berhev dikin, standarda C23 (Kurteya Biguherîne) bi pêvekên GNU ("-std=gnu23") ji hêla xwerû ve tê bikar anîn. Berê, standarda C17 ji hêla xwerû ve hatî bikar anîn (-std = gnu17). Guhertin dikare di avakirina projeyên heyî de ji ber tevlêbûna domdariya nullptr, tîpa _BitInt(n) û keywordên bool, rast û derewîn bibe sedema pirsgirêkan, ku dikarin bi nasnameyên bi heman navî yên ku di serlêdanan de hatine destnîşan kirin re nakokî bibin.
  • Kapasîteyên jêrîn ên standard C23 hatine bicîh kirin:
    • Rêbernameya "#embed" ji bo vegirtina çavkaniyên binary di kodê de hatî çêkirin.
    • Taybetmendiya "unsequenced", ku destnîşan dike ku encam bi rêza darvekirinê ve ne girêdayî ye.
    • Taybetmendiya "ji nû ve hilberandin" destnîşan dike ku fonksiyon her gav heman encamê vedigerîne ku ji heman têketinê re tê dayîn, ango bi faktorên din ve ne girêdayî ye.
  • Hêmanên standarda pêşerojê C2Y hatine bicîh kirin (-std=c2y û -std=gnu2y):
    • Qabiliyeta ragihandina guherbaran di gotineke "heke" de, wek "eger (int x = get ()) {...}".
    • Piştgiriya ji bo binavkirina lûpên ku bi kodê wan binav bikin. derve: ji bo (int i = 0; i < IK; ++ i) { guhêrbar (i) { halet 1: şkestin; // diçe ser CONT1 doza 2: şikandina derve; // diçe CONT2 } // CONT1 } // CONT2
    • Piştgiriya ji bo diyarkirina rêzikên nirxên yekjimar di bêjeyên dozê de, wek "case 1...10:".
    • Paşgirên "i" û "j" ji bo nîşankirina beşa xeyalî di jimareyên tevlihev de.
    • Ihtîmala bikaranîna operatorên "++" û "-" bi hejmarên tevlihev.
    • Avakirina "_Generic(type, expr1, expr2,…)" ji bo hilbijartina îfadeyek li ser bingeha celebê operandê.
    • Piştgirî ji bo gihîştina rêzikên byte mîna celebên tiştên din, wekî avahî û yekîtiyên.
    • Piştgirî ji bo sepandina operatora "alignof" li ser rêzikên netemam (yên ku bêyî diyarkirina mezinahiyê hatine ragihandin, wek "int a[]").
    • Ji bo rêzikên revê yên karaktera oktal, hexadecimal û gerdûnî hevoksa nû lê zêde kirin. Li şûna "\u", "\x" û "\nn", rêzikên "\u{}", "\o{}" û "\x{}" têne pêşniyar kirin, ku tê de her hejmar dikare were destnîşan kirin.
    • Fonksiyonên çêkirî "__builtin_stdc_rotate_left" û "__builtin_stdc_rotate_right".
    • Operasyonên bi dirêjahiya sifir li ser nîşankerên NULL destûr têne dayîn (mînak "sizeof (*p)").
  • Pêşeka ji bo zimanê C++ taybetmendiyên ku ji bo standarda pêşerojê ya C++26-ê têne pêşve xistin pêk tîne:
    • Operatorê guherbar "heval" ("heval Ts...").
    • Qabiliyeta bikaranîna peyva key constexpr bi guhertoyek operatora nû (cîhkirina nû) ji bo ku di dema berhevkirinê de tiştekê di bîra pêş-vekirî de bi cîh bike.
    • Di dema jêbirina nîşanderekê de ji bo cureyek netemam, derana çewtiyê.
    • Hevoksaziya ji bo danasîna parametreyên guherbar bi elîpsîsekê bêyî kommaya pêşîn (wek nimûne, dema ku "void e(int…)" li şûna "void e(int, ...)" were destnîşankirin) hate betal kirin.
    • Indekskirina pakêtek parametreyê di şablonan de.
    • Taybetmendiyên ji bo girêdanên sazkirî;
    • Hevoksazî '= jêbirin("sedem")';
    • Tevlîbûna "@", "$" û "`" di koma karaktera bingehîn de.
    • Bikaranîna makroyan ji bo ragihandina modulan qedexe ye.
    • Kapasîteya karanîna girêdana birêkûpêk wekî şert di îfadeyên ger û veguherînê de.
    • Piştgiriya ji bo berhevdana rêza rasterast (mînak: "int arr1[5]; int arr2[5]; bool same = arr1 == arr2") hate rawestandin.
    • Mekanîzmaya "#embed" ji bo binavkirina çavkaniyên binary.
    • Pola şablonê is_trivial hatiye neçalakkirin.
  • Taybetmendiyên C++23 zêde kirin:
    • Destûrê bide hin karanîna rêwerza "export" û destûr bide karanîna "export {}".
    • Piştgirî ji bo dirêjkirina temenê tiştên demkî yên di nav lûpên ku li ser rêzan dubare dibin.
  • Pirtûkxaneya libstdc++ ji bo modulên std û std.compat piştgiriya ceribandinê pêk tîne.
  • Bikaranîna destpêksazkera "{0}" ji bo yekîtiyên di koda C û C++ de êdî garantî nake ku hemî naverok werin paqij kirin, lê di şûna wê de hêmana yekem a yekîtiyê sifir dibe. Ji bo paqijkirina tevaya yekîtiyê, bilêvkirina "{}" ya ku di taybetmendiya C23 de hatî destnîşan kirin bikar bînin, an vebijarka "-fzero-init-padding-bits=unions" diyar bikin da ku tevgera kevin vegerînin.
  • Piştgiriyek ji bo taybetmendiya "musttail" ([[gnu::musttail]] û [[clang::musttail]]) ji bo bangên dûvikê garantîkirî. Taybetmendî ji bo vegotinên vegerê yên ku bangek paşverû ji fonksiyona heyî re dikin re derbas dibe, û piştrast dike ku bangek weha dê vegerandina dûvikê bikar bîne, ya ku bîranîna zêde li ser stikê venaqetîne (xetera qutbûna bîranînê bi hejmareke pir mezin a bangan re ji holê radike).
  • Piştgiriya pêkanîn ji bo taybetmendiya flag_enum ([[gnu::flag_enum]] û [[clang::flag_enum]]) li ser hejmartinan tê sepandin da ku destnîşan bike ku naverok di operasyonên bitwise de têne bikar anîn (di moda -Wswitch de pêşî li hişyariyan digire).
  • Piştgiriyek ji bo taybetmendiya "counted_by" zêde kir, ku dikare were bikar anîn da ku zeviyek di avahiyek bi rêzek maqûl a ku hejmara hêmanan diyar dike diyar bike. Taybetmendî dikare were bikar anîn da ku karbidestiya kontrolên zêdebûna tamponê baştir bike.
  • Taybetmendiya "nonnull_if_nonzero" li fonksiyonan zêde kir, ku diyar dike ku hin parametreyên fonksiyonê yên bi nîşangiran dikarin NULL bibin tenê heke parameterek din sifir be.
  • Berhevkarê dirêjkirî ku fonksiyonên derveyî "asm(….)" vedihewîne destûr e. Di navnîşên berhevkerê de, destûr tê dayîn ku bîranîn li devera sor a stikê (herêma li jorê stikê) were nivîsandin.
  • Berhevkirina koda C++ bi saya haşkirina şablonê ya çêtir zûtir e.
  • Optimîzasyonên nû lê zêde kirin. Piştgiriyek ji bo vektorîzekirina lûpên ku koda ji bo derketina zû vedihewîne (mînak, bi navgînek veqetandinê an vegerê ve) hatîye bicîh kirin, hetta ku lûpên weha rêzikên bi dînamîk veqetandî an tamponên ku mezinahiya wan di dema berhevkirinê de nayê zanîn manîpule bikin. Dema ku vebijarka -O2 were diyar kirin, vektorîzekirina hin lûpên bi hêsanî vektorîzan ên ku agahdariya rêwîtiyê ji bo wan peyda nabe tê çalak kirin.
  • Di qonaxa girêdanê de moda xweşbîniya zêdekirî (LTO, Optimîzasyona Zemanê Girêdanê) zêde kir, ku dema ku LTO bikar tîne di rewşên ku guhertinên piçûk di kodê de hatine çêkirin (yek fonksiyonek hate guherandin) wextê ji nû ve berhevkirinê kêm dike. Ji bo çalakkirina moda zêdebûnê, vebijarka "-flto-incremental" tê pêşniyar kirin.
  • Berhevkirina çêtir a pelên têketina pir mezin. Şopandina jimareyên stûnê yên ji 4096-an mezintir pêk anîn. Rastbûna çêtir a nîşankirina cîhê xeletî û hişyariyan di pelên pir mezin de.
  • Dema teşhîskirina pirsgirêkan dîtina raporan çêtir kirin. Mînakî, cîhê pirsgirêkê bi nîşana "⚠️" tê ronî kirin, xêzkirina encam ji bo xeletiyên di şablonên C++ de hate guheztin, îşaret hatine zêdekirin da ku derbasbûna standarda C23 hêsan bike, û nexşeya rengan ji nû ve hatî sêwirandin. Kapasîteya derxistina tespîtan di formata Sarif de (-fdiagnostics-format=sarif-pel) zêde kir.
  • Pirtûkxaneya libgdiagnostics hate bicîh kirin, ku dihêle hûn kapasîteyên GCC yên têkildarî sêwirana peyamên tespîtkirinê di projeyên xwe de yek bikin (mînak, hûn dikarin îşaretên binavkirin, ronîkirin û rastkirinê bikar bînin).
  • Hişyarîyên "-Wtrailing-whitespace" û "-Wleading-whitespace" hatin zêdekirin da ku cîhê spî yê mayî li dawiya rêzan û cîhê spî yê zêde li destpêka rêzan tespît bike.
  • Hişyariya "-Wheader-guard" zêde kir da ku pirsgirêkên di makroyên parastinê yên sernavê de rapor bike ku rê nade ku pelek sernav ji nû ve were tevlêkirin.
  • Pêşî ji bo zimanê D li guhertoya 2.111.0 hate nûve kirin.
  • Piştgiriya ji bo jimareyên bêsînor li pêşiya Fortran hate zêdekirin.
  • Di pakêtê de berhevkarek ji bo zimanê COBOL, gcobol heye, ku platformên x86-64 û AArch64 piştgirî dike û ji bo karanîna li ser pergalên 32-bit nayê sêwirandin. Berhevkar taybetmendiya ISO/IEC 1989:2023 pêk tîne û piraniya ceribandinên NIST CCVS/85 derbas dike.
  • Pêkanîna standardên OpenMP 5.0, 5.1, 5.2 û 6.0 (Pir-Pêvajoya Vekirî), pênasekirina API û rêbazên ji bo sepandina rêbazên bernameyên paralel ên li ser pergalên pir-core û hybrid (CPU+GPU/DSP) bi yekîneyên bîranîn û vektorîzasyonê yên hevpar (SIMD) re berdewam kirin. Piştgiriyek ji bo metadirectives û avahiyên tile, venebû, navber û belavkirinê zêde kir. Ji bo hin GPU-yên AMD û NVIDIA, piştgirî ji bo bîranîna hevpar a yekbûyî hate zêdekirin (bi destnîşankirina unified_shared_memory di rêwerznameya "pêdivî" de hate çalak kirin). Ji bo îfadeya "self_maps" piştgirî zêde kir.
  • Piştgiriya ji bo mîmariya AArch64 ji bo piştgirîkirina platforma MinGW (aarch64-w64-mingw32) hate nûve kirin. Zêdetirî 20 dirêjkirinên ARM8 hatine bicîh kirin û piştgirî ji bo dirêjkirina ACLE (Arm C Language Extensions) baştir bûye. Gelek çêtirkirin di hilberînerê kodê de hatine çêkirin. Piştgiriya CPU zêde kir:
    • Apple A12 (apple-a12)
    • Apple M1 (sêv-m1)
    • Apple M2 (sêv-m2)
    • Apple M3 (sêv-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)
  • Piştgiriya hilberîna kodê ya AMD Radeon GPU (GCN) hate nûve kirin da ku piştgirî bide pirtûkxaneya libstdc++ û piştgiriya hilberîna koda ceribandinê ji bo rêzikên cîhaza gfx9-generic, gfx10-3-generic, û gfx11-generic hate zêdekirin.
  • Piştgiriya x86 naha pêvekên mîmariya koma rêwerzên Intel AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS piştgirî dike. Piştgiriya ji bo CPU-yên Intel Diamond Rapids û Xeon Phi zêde kir.
  • Ji bo platformên LoongArch û AVR-ê kapasîteyên paşîn ên berfireh kirin.
  • Piştgiriya ji bo mîmariya armancê nios2 ku di pêvajoyên Nios II de tê bikar anîn rakirin. Piştgiriya ILP32 ABI (-mabi=ilp32) di bendera AArch64 de hate betal kirin û dê di serbestberdana mezin a din de were rakirin.

Source: opennet.ru

Add a comment