PÄc gada attÄ«stÄ«bas publicÄta bezmaksas kompilatoru komplekta izlaiÅ”ana GCC 10.1, pirmais lielais laidiens jaunajÄ GCC 10.x atzarÄ. SaskaÅÄ ar jauna shÄma izlaiduma numurus, izstrÄdes procesÄ tika izmantota versija 10.0 un Ä«si pirms GCC 10.1 iznÄkÅ”anas jau bija atzarojies GCC 11.0 atzars, uz kura pamata veidotos nÄkamais nozÄ«mÄ«gais laidiens GCC 11.1.
GCC 10.1 ir ievÄrojams ar daudzu jauninÄjumu ievieÅ”anu C++ valodÄ, kas izstrÄdÄta C++20 standartam, uzlabojumiem, kas saistÄ«ti ar topoÅ”o C valodas standartu (C2x), jaunÄm optimizÄcijÄm kompilatoru aizmugursistÄmÄs un eksperimentÄlo atbalstu. statiskÄs analÄ«zes režīms. TurklÄt jaunas filiÄles sagatavoÅ”anas laikÄ projekts pÄrcÄla repozitoriju no SVN uz Git.
Pievienots StatiskÄs analÄ«zes eksperimentÄlais režīms "- fanalizatorsā, kas veic resursietilpÄ«gu koda izpildes ceļu un datu plÅ«smu starpprocedÅ«ru analÄ«zi programmÄ. Režīms spÄj atklÄt problÄmas kompilÄcijas stadijÄ, piemÄram, dubultus izsaukumus uz free() funkciju vienam atmiÅas apgabalam, faila deskriptora noplÅ«des, atsauces atcelÅ”anu un nulles rÄdÄ«tÄju nodoÅ”anu, piekļuvi atbrÄ«votajiem atmiÅas blokiem, neinicializÄtu vÄrtÄ«bu izmantoÅ”anu utt. JaunÄ režīma izmantoÅ”ana OpenSSL kodam jau ir ļÄvusi identificÄt bÄ«stama ievainojamÄ«ba.
Uzlabota starpprocedÅ«ru optimizÄcija. IPA-SRA (Interprocedural Scalar Shared Replacement) caurlaide ir pÄrveidota, lai tÄ darbotos saistÄ«Å”anas laikÄ, un cita starpÄ tagad tiek noÅemtas aprÄÄ·inÄtÄs un atgrieztÄs neizmantotÄs vÄrtÄ«bas. OptimizÄcijas režīmÄ "-O2" ir iespÄjota opcija "-finline-functions", kas tiek pÄrregulÄta, lai dotu priekÅ”roku kompaktÄkam kodam, nevis izpildes veiktspÄjai. Ir paÄtrinÄts iekļauto funkciju izvietoÅ”anas heiristikas darbs. IekļautÄs paplaÅ”inÄÅ”anas un funkciju klonÄÅ”anas heiristika tagad var izmantot informÄciju par vÄrtÄ«bu diapazoniem, lai prognozÄtu atseviŔķu transformÄciju efektivitÄti. Programmai C++ ir uzlabota uz tipu balstÄ«tÄs aizstÄjvÄrdu parsÄÅ”anas precizitÄte.
Uzlabota saistÄ«Å”anas laika optimizÄcija (LTO). Pievienots jauns izpildÄmais fails lto-dump lai atiestatÄ«tu informÄciju par objektu failiem ar LTO baitu kodu. ParalÄlÄs LTO caurlaides automÄtiski nosaka vienlaicÄ«gi izpildÄmo make uzdevumu skaitu un, ja tos nevar noteikt, kÄ paralÄlizÄcijas koeficientu izmanto informÄciju par CPU kodolu skaitu. Pievienota iespÄja saspiest LTO baitu kodu, izmantojot zstd algoritmu.
Uzlabots optimizÄcijas mehÄnisms, kas balstÄ«ts uz koda profilÄÅ”anas rezultÄtiem (PGO - Profile-guided optimization), kas Ä£enerÄ optimÄlÄku kodu, pamatojoties uz koda izpildes Ä«paŔību analÄ«zi. Uzlabota profila uzturÄÅ”ana kompilÄcijas un karstÄ/aukstÄ koda atdalÄ«Å”anas laikÄ. Izmantojot opciju "-fprofila vÄrtÄ«basĀ» tagad var pÄrraudzÄ«t lÄ«dz 4 profila vÄrtÄ«bÄm, piemÄram, netieÅ”iem zvaniem un sniedzot precÄ«zÄku profila informÄciju.
ParalÄlÄs programmÄÅ”anas specifikÄcija ieviesta C, C++ un Fortran valodÄm OpenACC 2.6, kas definÄ rÄ«kus GPU un specializÄto procesoru, piemÄram, NVIDIA PTX, izkrauÅ”anas operÄciju veikÅ”anai. Standarta ievieÅ”ana ir gandrÄ«z pabeigta OpenMP 5.0 (Open Multi-Processing), kas nosaka API un paralÄlÄs programmÄÅ”anas metožu pielietoÅ”anas metodes daudzkodolu un hibrÄ«dsistÄmÄs (CPU+GPU/DSP) ar koplietojamo atmiÅu un vektorizÄcijas vienÄ«bÄm (SIMD). Pievienotas funkcijas, piemÄram, pÄdÄjais privÄtais nosacÄ«jums, skenÄÅ”anas un cilpas direktÄ«vas, secÄ«bas un use_device_addr izteiksmes. OpenMP un OpenACC ir pievienots atbalsts izkrauÅ”anas darbÄ«bÄm ceturtÄs paaudzes (Fidži) un piektÄs paaudzes AMD Radeon (GCN) GPU (VEGA 10/VEGA 20).
C saimes valodÄm ir pievienota funkcija āpiekļuveā, lai aprakstÄ«tu funkcijas piekļuvi objektiem, kas nodoti ar atsauci vai rÄdÄ«tÄju, un saistÄ«tu Å”Ädus objektus ar veselu skaitļu argumentiem, kas satur informÄciju par objektu lielumu. Lai strÄdÄtu kopÄ ar āaccessā, tiek ieviests atribÅ«ts ātypeā, lai noteiktu nepareizu piekļuvi no lietotÄja funkcijÄm, piemÄram, ierakstot vÄrtÄ«bas apgabalÄ Ärpus masÄ«va robežÄm. Ir pievienots arÄ« atribÅ«ts "symver", lai saistÄ«tu simbolus ELF failÄ ar konkrÄtiem versiju numuriem.
Pievienoti jauni brÄ«dinÄjumi:
ā-Wstring-compareā (iespÄjots ar ā-Wextraā) - brÄ«dina par tÄdu izteiksmju klÄtbÅ«tni, kurÄs nulle tiek salÄ«dzinÄta ar strcmp un strncmp funkciju izsaukÅ”anas rezultÄtu, kas ir lÄ«dzvÄrtÄ«ga konstantei, jo garums viena argumenta lielums ir lielÄks par masÄ«va lielumu otrajÄ argumentÄ .
"-Wzero-length-bounds" (iespÄjots ar "-Warray-bounds") ā brÄ«dina par piekļuvi nulles garuma masÄ«va elementiem, kas var novest pie citu datu pÄrrakstÄ«Å”anas.
BrÄ«dinÄjumi ā-Warray-boundsā, ā-Wformat-overflowā, ā-Wrestrictā, ā-Wreturn-local-addrā un ā-Wstringop-overflowā ir paplaÅ”inÄti, lai palielinÄtu Ärpus robežu situÄciju skaitu. kas tiek apstrÄdÄti.
Ieviesta iespÄja tieÅ”i norÄdÄ«t platas rakstzÄ«mes identifikatoros, izmantojot paÅ”reizÄjo kodÄjumu (pÄc noklusÄjuma UTF-8), nevis UCN apzÄ«mÄjumu (\uNNNN vai \UNNNNNNNN). PiemÄram:
statiskÄ konst int Ļ = 3;
int get_naive_pi() {
atgrieÅ”anÄs Ļ;
}
C valodai ir ieviesta daļa jauno funkciju, kas izstrÄdÄtas C2X standartÄ (iespÄjota, norÄdot -std=c2x un -std=gnu2x): ir parÄdÄ«jies atbalsts ā[[]]ā sintaksei, lai definÄtu atribÅ«tus, kÄ C++ (piemÄram, [[gnu ::const]], [[novecojis]], [[fallthrough]] un [[maybe_unused]]. Pievienots "u8" sintakses atbalsts konstantu definÄÅ”anai ar UTF-8 rakstzÄ«mÄm.
Pievienoti jauni makro . Strftime pievienoti "%OB" un "%Ob" aizvietojumi.
C noklusÄjuma režīms ir "-fno-common", kas dažÄs platformÄs ļauj efektÄ«vÄk piekļūt globÄlajiem mainÄ«gajiem.
AttiecÄ«bÄ uz C++ ir ieviestas aptuveni 16 izmaiÅas un jauninÄjumi, kas izstrÄdÄti C++20 standartÄ. Ieskaitot pievienoto atslÄgvÄrdu āconstitinā
un ir ieviests atbalsts veidÅu paplaÅ”inÄjumiem "jÄdzieni". JÄdzieni ļauj definÄt veidnes parametru prasÄ«bu kopu, kas kompilÄÅ”anas laikÄ ierobežo argumentu kopu, ko var pieÅemt kÄ veidnes parametrus. JÄdzienus var izmantot, lai izvairÄ«tos no loÄ£iskÄm pretrunÄm starp veidnÄ izmantoto datu tipu Ä«paŔībÄm un ievades parametru datu tipa Ä«paŔībÄm.
G++ nodroÅ”ina nenoteiktas uzvedÄ«bas noteikÅ”anu, ko izraisa nemainÄ«gu objektu maiÅa, izmantojot constexpr. SamazinÄts kompilatora atmiÅas patÄriÅÅ”, aprÄÄ·inot constexpr. Pievienoti jauni brÄ«dinÄjumi "-Wmismatched-tags" un "-Wredundant-tags".
Ir ierosinÄtas jaunas komandrindas opcijas:
"-fallocation-dce", lai noÅemtu nevajadzÄ«gos operatoru "new" un "delete" pÄrus.
"-fprofile-partial-training", lai atspÄjotu izmÄra optimizÄciju kodam, kuram nav treniÅa.
"-fprofile-reproducÄjams, lai kontrolÄtu profila reproducÄjamÄ«bas lÄ«meni.
"-fprofile-prefix-path", lai definÄtu pamata avota veidoÅ”anas direktoriju, ko izmanto atseviŔķai profila Ä£enerÄÅ”anai ("-fprofile-generate=profile_dir" un "-fprofile-use=profile_dir").
MinÄto opciju brÄ«dinÄjuma tekstÄ ir norÄdÄ«tas hipersaites, kas ļauj pÄriet uz Å”o opciju dokumentÄciju. URL aizstÄÅ”ana tiek kontrolÄta, izmantojot opciju "-fdiagnostics-urls".
Pievienots priekÅ”apstrÄdÄtÄja operators "__ir_builtin", ko var izmantot, lai pÄrbaudÄ«tu iebÅ«vÄtÄs funkcijas.
Pievienota jauna iebÅ«vÄta funkcija "__builtin_roundeven" ar ISO/IEC TS 18661 specifikÄcijÄ definÄtÄs noapaļoÅ”anas funkcijas ievieÅ”anu, kas ir lÄ«dzÄ«ga "apaļoÅ”anai", bet noapaļo daļu, kas lielÄka par 0.5 uz augÅ”u (lÄ«dz lielÄkai vÄrtÄ«bai), mazÄka par 0.5 - uz leju (lÄ«dz nullei) un vienÄds ar 0.5 - sÄkot no priekÅ”pÄdÄjÄ cipara paritÄtes.
AArch64 arhitektÅ«rai ir pievienots atbalsts SVE2 paplaÅ”inÄjumam un ir uzlabots atbalsts SVE (Scalable Vector Extension), tostarp pievienots atbalsts iebÅ«vÄtajÄm SVE ACLE funkcijÄm un veidiem, kÄ arÄ« vektorizÄcijas izmantoÅ”ana. Ir paplaÅ”inÄts atbalsts LSE (Lielie sistÄmas paplaÅ”inÄjumi) un TME (Transactional Memory Extension). Pievienotas jaunas instrukcijas, kas piedÄvÄtas Armv8.5-A un Armv8.6-A, tostarp norÄdÄ«jumi par nejauÅ”u skaitļu Ä£enerÄÅ”anu, noapaļoÅ”anu, atmiÅas tagu saistÄ«Å”anu,
bfloat16 un matricas reizinÄÅ”anu. Pievienots procesora atbalsts
Roka Cortex-A77,
Roka Cortex-A76AE,
Roka Cortex-A65,
Roka Cortex-A65AE,
Roka Cortex-A34 un
Marvell ThunderX3.
Pievienots atbalsts ABI FDPIC (32 bitu funkciju norÄdes) ARM64. PÄrstrÄdÄta un optimizÄta 64 bitu veselu skaitļu operÄciju apstrÄde. Pievienots CPU atbalsts
Roka Cortex-A77,
Roka Cortex-A76AE un
Roka Cortex-M35P. PaplaÅ”inÄts atbalsts ACLE datu apstrÄdes instrukcijÄm, tostarp 32 bitu SIMD, 16 bitu reizinÄÅ”ana, fiksÄcijas aritmÄtika un citas DSP algoritmu optimizÄcijas. Pievienots eksperimentÄls atbalsts ACLE CDE (Custom Datapath Extension) instrukcijÄm.
IevÄrojami uzlabota koda Ä£enerÄÅ”ana un vektorizÄcija AMD GPU aizmugursistÄmÄ, kuras pamatÄ ir GCN mikroarhitektÅ«ra.
Ir pievienots jauns Intel ENQCMD instrukciju kopas arhitektÅ«ras paplaÅ”inÄjums (-menqcmd) IA-32/x86-64 arhitektÅ«rÄm. Pievienots atbalsts Intel Cooperlake (-march=cooperlake, ietver AVX512BF16 ISA paplaÅ”inÄjumu) un Tigerlake (-march=tigerlake, ietver MOVDIRI, MOVDIR64B un AVX512VP2INTERSECT ISA paplaÅ”inÄjumus) CPU.
HSAIL (neviendabÄ«gÄs sistÄmas arhitektÅ«ras starpvalodas) ievieÅ”ana neviendabÄ«gÄm skaitļoÅ”anas sistÄmÄm, kuru pamatÄ ir HSA arhitektÅ«ra, ir novecojusi un, iespÄjams, tiks noÅemta nÄkamajÄ laidienÄ.