Itusilẹ ti GCC 15 compiler suite

Lẹhin ọdun kan ti idagbasoke, GCC compiler suite GCC 15.1 ọfẹ ti jẹ idasilẹ, itusilẹ pataki akọkọ ni ẹka GCC 15.x tuntun. Gẹgẹbi ero nọmba itusilẹ, ẹya 15.0 ni a lo lakoko idagbasoke, ati ni kete ṣaaju itusilẹ ti GCC 15.1, ẹka kan ti GCC 16.0 ti tẹlẹ forked, eyiti yoo jẹ ipilẹ ti itusilẹ pataki ti nbọ, GCC 16.1.

Awọn iyipada akọkọ:

  • Nigbati o ba n ṣajọ awọn eto C, boṣewa C23 (Ayipada Lakotan) pẹlu awọn amugbooro GNU ("-std=gnu23") jẹ lilo nipasẹ aiyipada. Ni iṣaaju, boṣewa C17 jẹ lilo nipasẹ aiyipada (-std=gnu17). Iyipada naa le fa awọn iṣoro nigba kikọ awọn iṣẹ akanṣe ti o wa nitori ifisi ti nullptr ibakan, iru _BitInt (n), ati bool, otitọ, ati awọn koko-ọrọ eke, eyiti o le tako pẹlu awọn idamọ ti a darukọ kanna ti asọye ninu awọn ohun elo.
  • Awọn agbara atẹle ti boṣewa C23 ti ni imuse:
    • Ilana "#ifibọ" jẹ apẹrẹ fun fifi awọn orisun alakomeji sinu koodu.
    • Ẹya “aiṣedeede”, eyiti o tọka pe abajade ko dale lori aṣẹ ti ipaniyan.
    • Ẹya “atunṣe” tọkasi pe iṣẹ nigbagbogbo n da abajade kanna ti a fun ni titẹ sii kanna, ie ko dale lori awọn ifosiwewe miiran.
  • Awọn eroja ti boṣewa C2Y iwaju ti jẹ imuse (-std=c2y ati -std=gnu2y):
    • Agbara lati kede awọn oniyipada ninu ọrọ “if”, gẹgẹbi “if (int x = gba ()) {...}”.
    • Atilẹyin fun awọn loruko lorukọ lati tọka si wọn ni koodu. lode: fun (int i = 0; i <IK; ++ i) { yipada (i) { irú 1: ṣẹ; // fo si CONT1 irú 2: fọ lode; // fo si CONT2 } // CONT1 } // CONT2
    • Atilẹyin fun sisọ awọn sakani ti awọn iye odidi ni awọn ikosile ọran, gẹgẹbi “ọran 1...10:”.
    • Awọn suffixes "i" ati "j" lati ṣe afihan apakan ero inu awọn nọmba idiju.
    • O ṣeeṣe lati lo awọn oniṣẹ "++" ati "-" pẹlu awọn nọmba eka.
    • "_Generic (iru, expr1, expr2, ...)" ti o kọ fun yiyan ikosile ti o da lori iru operand.
    • Atilẹyin fun iraye si awọn ọna baiti bii awọn iru nkan miiran, gẹgẹbi awọn ẹya ati awọn ẹgbẹ.
    • Atilẹyin fun lilo oniṣẹ “alignof” si awọn akojọpọ ti ko pe (awọn ti a sọ laisi asọye iwọn kan, gẹgẹbi “int a[]”).
    • Ṣafikun sintasi tuntun fun octal, hexadecimal, ati awọn ọna abayo iwa gbogbo agbaye. Dípò “\u”, “\x” àti “\nn”, àwọn ọ̀nà “\u{}”, “\o{}” àti “\x{}” ni a ti dábàá, nínú èyí tí iye àwọn nọ́ńbà èyíkéyìí lè jẹ́ pàtó.
    • Awọn iṣẹ ti a ṣe sinu "__builtin_stdc_rotate_left" ati "__builtin_stdc_rotate_right".
    • Awọn iṣẹ ṣiṣe gigun odo lori awọn itọka NULL ni a gba laaye (fun apẹẹrẹ “iwọn (* p)”).
  • Iwaju iwaju fun ede C++ n ṣe awọn ẹya ti o ni idagbasoke fun boṣewa C++26 ọjọ iwaju:
    • Onišẹ iyatọ "ọrẹ" ("ọrẹ Ts...").
    • Agbara lati lo koko-ọrọ constexpr pẹlu iyatọ ti oniṣẹ tuntun (ipo tuntun) lati gbe ohun kan sinu iranti ti a ti sọ tẹlẹ ni akoko akopọ.
    • Ijade aṣiṣe nigba piparẹ itọka kan si iru ti ko pe.
    • Sintasi fun asọye awọn paramita variadic pẹlu ellipsis laisi ami idẹsẹ iṣaaju (fun apẹẹrẹ, nigba titọkasi “ofo e(int…)” dipo “ofo e(int, …)”) ti jẹ alaimọ.
    • Titọka package paramita ni awọn awoṣe.
    • Awọn eroja fun awọn abuda ti a ṣeto;
    • Syntax '= paarẹ("idi")';
    • Ifisi ti "@", "$" ati "`" ni ipilẹ ohun kikọ.
    • Lilo awọn Makiro lati sọ awọn modulu jẹ eewọ.
    • Agbara lati lo abuda eleto bi ipo ninu ti o ba yipada awọn alaye.
    • Atilẹyin fun afiwe taara taara (fun apẹẹrẹ “int arr1 [5]; int arr2 [5]; bool same = arr1 == arr2”) ti dawọ duro.
    • Ilana "#ifibọ" fun ifibọ awọn orisun alakomeji.
    • Kilasi awoṣe is_trivial ti jẹ alaimọ.
  • Awọn ẹya C ++23 ti a ṣafikun:
    • Ko gba laaye diẹ ninu awọn lilo ti itọsọna “fifiranṣẹ si ilẹ okeere” ati gba lilo “si ilẹ okeere {}”.
    • Atilẹyin fun faagun igbesi aye awọn nkan igba diẹ ninu fun awọn losiwajulosehin ti o ṣe iwọn lori awọn sakani.
  • Ile-ikawe libstdc++ n ṣe atilẹyin esiperimenta fun std ati awọn modulu std.compat.
  • Lilo olupilẹṣẹ "{0}" fun awọn ẹgbẹ ni C ati koodu C++ ko ṣe idaniloju pe gbogbo akoonu ti wa ni piparẹ, ṣugbọn dipo abajade ni ipin akọkọ ti ẹgbẹ naa ni ao kuro. Lati ko gbogbo irẹpọ kuro, lo “{}” ikosile ti asọye ninu alaye C23, tabi pato “-fzero-init-padding-bits=unions” aṣayan lati mu pada ihuwasi atijọ.
  • Atilẹyin imuse fun “musttail” abuda ([gnu :: musttail]] ati [[clang :: musttail]]) fun awọn ipe iru ti o ni ẹri. Ẹya naa kan si awọn alaye pada ti o ṣe ipe loorekoore si iṣẹ lọwọlọwọ, ati rii daju pe iru ipe kan yoo lo atunṣe iru, eyiti ko pin iranti afikun lori akopọ (imukuro eewu ti ṣiṣiṣẹ kuro ni iranti pẹlu nọmba ti o tobi pupọ ti awọn ipe).
  • Atilẹyin imuse fun abuda flag_enum ([gnu :: flag_enum]] ati [[clang :: flag_enum]]) ti a lo si awọn ikawe lati fihan pe awọn akoonu naa ni a lo ni awọn iṣẹ bitwise (idilọwọ awọn ikilo ni ipo Wswitch).
  • Atilẹyin ti a ṣafikun fun “counted_by” abuda, eyiti o le ṣee lo lati pato aaye kan ninu eto kan pẹlu opo to rọ ti o pinnu nọmba awọn eroja. Ẹya naa le ṣee lo lati mu iṣiṣẹ ti awọn sọwedowo aponsedanu buffer dara si.
  • Fikun “nonnull_if_nonzero” abuda si awọn iṣẹ, eyiti o sọ pe diẹ ninu awọn paramita iṣẹ pẹlu awọn itọka le jẹ NULL nikan ti paramita miiran ba jẹ odo.
  • Apejọ ti o gbooro sii “asm(….)” awọn iṣẹ ita ti gba laaye. Ni awọn ifibọ apejọ, o gba ọ laaye lati tun kọ iranti ni agbegbe pupa ti akopọ (agbegbe ti o wa ni oke ti akopọ).
  • Akopọ C ++ koodu ti wa ni yiyara ọpẹ si imudara hashing awoṣe.
  • Ti ṣafikun awọn iṣapeye tuntun. Atilẹyin ti ni imuse fun awọn yipo vectorizing ti o ni koodu fun ijade ni kutukutu (fun apẹẹrẹ, nipasẹ isinmi tabi ipe ipadabọ), paapaa ti iru awọn losiwajulosehin ba ṣe afọwọyi awọn ọna ti a pin ni agbara tabi awọn buffer ti iwọn wọn jẹ aimọ ni akoko akopọ. Nigba ti aṣayan -O2 ti wa ni pato, vectorization ti diẹ ninu awọn iṣọrọ vectorizable losiwajulosehin fun eyi ti tripcount alaye ni ko wa.
  • Ipo iṣapeye afikun ti a ṣafikun ni ipele sisopo (LTO, Iṣapejuwe Aago-ọna asopọ), eyiti o dinku ni pataki akoko iṣakojọpọ nigba lilo LTO ni awọn ipo nibiti awọn ayipada kekere ti ṣe si koodu naa (iṣẹ kan ti ṣatunkọ). Lati mu ipo afikun ṣiṣẹ, aṣayan "-flto-incremental" ni a dabaa.
  • Imudara akopọ ti awọn faili igbewọle ti o tobi pupọ. Titele imuse ti awọn nọmba ọwọn ti o tobi ju 4096. Imudara ilọsiwaju ti afihan ipo awọn aṣiṣe ati awọn ikilọ ni awọn faili nla pupọ.
  • Ilọsiwaju hihan ti awọn ijabọ nigba ṣiṣe ayẹwo awọn iṣoro. Fun apẹẹrẹ, ipo iṣoro naa jẹ afihan pẹlu aami “⚠️”, iṣeto ti iṣelọpọ fun awọn aṣiṣe ni awọn awoṣe C ++ ti yipada, awọn amọran ti ṣafikun lati ṣe irọrun iyipada si boṣewa C23, ati pe a ti tun ṣe apẹrẹ awọ. Ṣe afikun agbara lati mu awọn iwadii jade ni ọna kika Sarif (-fdiagnostics-format=sarif-file).
  • Ile-ikawe libgdiagnostics ti ni imuse, ngbanilaaye lati ṣepọ awọn agbara GCC ti o ni ibatan si apẹrẹ ti awọn ifiranṣẹ iwadii sinu awọn iṣẹ akanṣe rẹ (fun apẹẹrẹ, o le lo agbasọ, afihan, ati awọn itọsi atunṣe).
  • Ṣafikun "-Wtrailing-whitespace" ati awọn ikilọ "-Wleading-whitespace" lati ṣe awari aaye funfun ti o ku ni opin awọn laini ati afikun aaye funfun ni ibẹrẹ awọn laini.
  • Ikilọ "-Wheader-guard" ti a ṣafikun lati jabo awọn iṣoro ni awọn Makiro oluso akọsori ti o ṣe idiwọ faili akọsori lati tun wa lẹẹkansi.
  • Iwaju iwaju fun ede D ti ni imudojuiwọn si ẹya 2.111.0.
  • Atilẹyin fun awọn nọmba ti ko forukọsilẹ ni a ti ṣafikun si iwaju Fortran.
  • Apo naa pẹlu akopọ fun ede COBOL, gcobol, eyiti o ṣe atilẹyin awọn iru ẹrọ x86-64 ati AArch64 ati pe ko ṣe apẹrẹ fun lilo lori awọn ọna ṣiṣe 32-bit. Olupilẹṣẹ ṣe imuse ISO/IEC 1989:2023 sipesifikesonu ati pe o kọja pupọ julọ awọn idanwo NIST CCVS/85.
  • Imuse ti OpenMP 5.0, 5.1, 5.2 ati 6.0 (Open Multi-Processing) awọn ajohunše, asọye API ati awọn ọna fun lilo ni afiwe siseto ọna lori olona-mojuto ati arabara (CPU + GPU / DSP) awọn ọna šiše pẹlu pín iranti ati vectorization sipo (SIMD), ti a ti tesiwaju. Atilẹyin ti a ṣafikun fun awọn itọsi meta-itọnisọna ati tile, yiyi silẹ, interop ati awọn itumọ ti fifiranṣẹ. Fun diẹ ninu awọn AMD ati NVIDIA GPUs, atilẹyin fun iranti pinpin iṣọkan ni a ti ṣafikun (ti ṣiṣẹ nipasẹ sisọ unified_shared_memory ninu itọsọna “nbeere”). Atilẹyin ti a ṣafikun fun ikosile “self_maps”.
  • Afẹyinti fun faaji AArch64 ti ni imudojuiwọn lati ṣe atilẹyin iru ẹrọ MinGW (aarch64-w64-mingw32). Diẹ sii ju awọn amugbooro 20 ARM8 ti ni imuse ati atilẹyin fun itẹsiwaju ACLE (Arm C Language Extensions) ti ni ilọsiwaju. Awọn ilọsiwaju lọpọlọpọ ti ṣe si olupilẹṣẹ koodu. Atilẹyin Sipiyu ti a ṣafikun:
    • Apple A12 (apple-a12)
    • Apple M1 (apple-m1)
    • Apple M2 (apple-m2)
    • Apple M3 (apple-m3)
    • Arm Cortex-A520AE (kotesi-a520ae)
    • Arm Cortex-A720AE (kotesi-a720ae)
    • Arm Cortex-A725 (kotesi-a725)
    • Arm Cortex-R82AE (kotesi-r82ae)
    • Arm Cortex-X925 (kotesi-x925)
    • Arm Neoverse N3 (neoverse-n3)
    • Arm Neoverse V3 (neoverse-v3)
    • Arm Neoverse V3AE (neoverse-v3ae)
    • FUJITSU-MONAKA (fujitsu-monaka)
    • NVIDIA Grace
    • NVIDIA Olympus (olimpiiki)
    • Qualcomm Oryon-1 (Oryon-1)
  • Atilẹyin iran koodu AMD Radeon GPU (GCN) ti ni imudojuiwọn lati ṣe atilẹyin ile-ikawe libstdc ++ ati atilẹyin iran koodu esiperimenta ti ṣafikun fun gfx9-jeneriki, gfx10-3-generic, ati jara ẹrọ gfx11-jeneriki.
  • Atilẹyin x86 ni bayi ṣe atilẹyin ilana itọnisọna Intel ṣeto awọn amugbooro faaji AVX10.2, AMX-AVX512, AMX-FP8, AMX-MOVRS, AMX-TF32, AMX-TRANSPOSE, MOVRS. Ṣe afikun atilẹyin fun Intel Diamond Rapids ati Xeon Phi CPUs.
  • Awọn agbara ifẹhinti gbooro fun LoongArch ati awọn iru ẹrọ AVR.
  • Atilẹyin yiyọkuro fun faaji ibi-afẹde nios2 ti a lo ninu awọn ilana Nios II. Atilẹyin fun ILP32 ABI (-mabi=ilp32) ti o wa ni ibudo AArch64 ti jẹ idinku ati pe yoo yọkuro ni itusilẹ pataki ti nbọ.

orisun: opennet.ru

Fi ọrọìwòye kun