PÄc gada attÄ«stÄ«bas publicÄta bezmaksas kompilatoru komplekta izlaiÅ”ana GCC 9.1, pirmais lielais laidiens jaunajÄ GCC 9.x atzarÄ. SaskaÅÄ ar jauna shÄma izlaiduma numurus, izstrÄdes procesÄ tika izmantota versija 9.0 un Ä«si pirms GCC 9.1 iznÄkÅ”anas jau bija atzarojies GCC 10.0 atzars, uz kura pamata veidotos nÄkamais nozÄ«mÄ«gais laidiens GCC 10.1.
GCC 9.1 ir ievÄrojams ar C++17 standarta atbalsta stabilizÄÅ”anu, topoÅ”Ä C++20 standarta (ar koda nosaukumu C++2a) iespÄju ievieÅ”anu, iekļauÅ”anu D valodas frontendÄ, daļÄju OpenMP 5.0 atbalstu. , gandrÄ«z pilnÄ«gs OpenACC 2.5 atbalsts, palielinÄt starpprocedÅ«ru optimizÄcijas un optimizÄcijas mÄrogojamÄ«bu saistÄ«Å”anas stadijÄ, diagnostikas rÄ«ku paplaÅ”inÄÅ”ana un jaunu brÄ«dinÄjumu pievienoÅ”ana, aizmugursistÄmas OpenRISC, C-SKY V2 un AMD GCN GPU.
Pievienots D programmÄÅ”anas valodas atbalsts. GCC ietver priekÅ”galu ar kompilatoru GDC (Gnu D Compiler) un izpildlaika bibliotÄkas (libphobos), kas ļauj izmantot standarta GCC, lai izveidotu programmas D programmÄÅ”anas valodÄ. D valodas atbalsta iespÄjoÅ”anas process GCC ir sÄcies vÄl 2011. gadÄ, bet ievilkÄs sakarÄ ar nepiecieÅ”amÄ«bu saskaÅot kodu ar GCC prasÄ«bÄm un problÄmÄm ar intelektuÄlÄ Ä«paÅ”uma tiesÄ«bu nodoÅ”anu Digital Mars, kas izstrÄdÄ D programmÄÅ”anas valodu;
Ir veikti uzlabojumi kodu Ä£eneratorÄ. PiemÄram, ir ieviestas dažÄdas stratÄÄ£ijas Switch izteiksmju paplaÅ”inÄÅ”anai (lÄciena tabula, bitu pÄrbaude, lÄmumu koks) atkarÄ«bÄ no situÄcijÄm. Pievienota iespÄja pÄrveidot lineÄras funkcijas, kas ietver Switch izteiksmi, izmantojot optimizÄciju ā-ftree-switch-conversionā (piemÄram, tÄdu nosacÄ«jumu kopa kÄ ācase 2: how = 205; break; case 3: how = 305; break ;ā tiks pÄrveidots par "100 * kÄ + 5";
Uzlabota starpprocedÅ«ru optimizÄcija. IekļautÄs izvietoÅ”anas iestatÄ«jumi ir pielÄgoti modernÄm C++ kodu bÄzÄm un paplaÅ”inÄti ar jauniem parametriem max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns un uninlined. - domÄÅ”anas laiks. Uzlabota aukstÄ/karstÄ koda atdalÄ«Å”anas precizitÄte un agresivitÄte. Uzlabota mÄrogojamÄ«ba ļoti lieliem tulkoÅ”anas vienÄ«bas (piemÄram, pielietojot optimizÄciju saistÄ«Å”anas stadijÄ lielÄm programmÄm);
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. Kopsavilkuma opcija "-fprofila lietoÅ”ana" tagad ietver optimizÄcijas režīmus "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" un "-ftree-loop-distribution". NoÅemta histogrammu ar skaitÄ«tÄjiem iekļauÅ”ana failos, kas samazinÄja failu izmÄrus ar profiliem (tagad histogrammas tiek Ä£enerÄtas lidojumÄ, veicot optimizÄciju saistÄ«Å”anas laikÄ);
Uzlabota saistÄ«Å”anas laika optimizÄcija (LTO). Pirms rezultÄta Ä£enerÄÅ”anas tika nodroÅ”inÄta tipu vienkÄrÅ”oÅ”ana, kas ļÄva ievÄrojami samazinÄt LTO objektu failu izmÄrus, samazinÄt atmiÅas patÄriÅu saistÄ«Å”anas stadijÄ un uzlabot darbÄ«bu paralÄlizÄciju. Sadaļu skaits (-param lto-partitions) ir palielinÄts no 32 lÄ«dz 128, kas uzlabo veiktspÄju sistÄmÄs ar lielu CPU pavedienu skaitu. Ir pievienots parametrs, lai kontrolÄtu optimizÄtÄja procesu skaitu
"-param lto-max-streaming-parallelism";
TÄ rezultÄtÄ, salÄ«dzinot ar GCC 8.3, GCC 9 ieviestÄs optimizÄcijas atļauts samaziniet Firefox 5 un LibreOffice 66 kompilÄcijas laiku par aptuveni 6.2.3%. Objektu failu lielums samazinÄjÄs par 7%. SaistÄ«Å”anas laiks 8 kodolu centrÄlajam procesoram samazinÄjÄs par 11%. SaistÄ«Å”anas posma secÄ«gÄ optimizÄcijas stadija tagad ir par 28% ÄtrÄka un patÄrÄ par 20% mazÄk atmiÅas. Katra LTO paralÄlÄ posma procesora atmiÅas patÄriÅÅ” samazinÄjÄs par 30%;
LielÄkÄ daļa paralÄlÄs programmÄÅ”anas specifikÄcijas ir ieviestas C, C++ un Fortran valodÄm OpenACC 2.5, kas nosaka rÄ«kus GPU un specializÄtu procesoru, piemÄram, NVIDIA PTX, izkrauÅ”anas operÄciju veikÅ”anai;
C un C++ standartam ir ieviests daļÄjs atbalsts OpenMP 5.0 (Open Multi-Processing), kas nosaka API un paralÄlÄs programmÄÅ”anas metožu pielietoÅ”anas metodes C, C++ un Fortran valodÄm daudzkodolu un hibrÄ«dsistÄmÄs (CPU+GPU/DSP) ar koplietojamo atmiÅu un vektorizÄcijas vienÄ«bÄm (SIMD) ;
C valodai ir pievienoti jauni brÄ«dinÄjumi: "-SapakotÄ biedra vatÄ«te" (nesalÄ«dzinÄta rÄdÄ«tÄja vÄrtÄ«ba struktÅ«ras vai savienÄ«bas iepakotam elementam) un
Ā«-AbsolÅ«tÄ vÄrtÄ«ba" (piekļūstot funkcijÄm absolÅ«tÄs vÄrtÄ«bas aprÄÄ·inÄÅ”anai, ja norÄdÄ«tajam argumentam ir piemÄrotÄka funkcija, piemÄram, abs(3.14) vietÄ jÄizmanto fabs(3.14). C++ pievienoti jauni brÄ«dinÄjumi: "-Wdeprecated-copy",
"-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" un "-Wclass-conversion". Daudzi iepriekÅ” pieejamie brÄ«dinÄjumi ir paplaÅ”inÄti;
Pievienots eksperimentÄls atbalsts daļai no topoÅ”Ä C valodas standarta ar koda nosaukumu C2x. Lai iespÄjotu C2x atbalstu, izmantojiet opcijas "-std=c2x" un "-std=gnu2x" (lai iespÄjotu GNU paplaÅ”inÄjumus). Standarts vÄl ir agrÄ«nÄ izstrÄdes stadijÄ, tÄpÄc no tÄ iespÄjÄm tiek atbalstÄ«ta tikai izteiksme _Static_assert ar vienu argumentu (_Static_assert ar diviem argumentiem ir standartizÄta C11);
Atbalsts C++17 standartam ir pasludinÄts par stabilu. FrontendÄ C++17 valodas iespÄjas ir pilnÄ«bÄ ieviestas, un libstdc++ standartÄ definÄtÄs bibliotÄkas funkcijas ir tuvu pilnai ievieÅ”anai;
TurpinÄjums Ä«stenoÅ”anu topoÅ”Ä C++2a standarta elementi. PiemÄram, ir pievienota iespÄja iekļaut diapazonus inicializÄcijas laikÄ, ir ieviesti paplaÅ”inÄjumi lambda izteiksmÄm, ir pievienots atbalsts tukÅ”iem datu struktÅ«ru dalÄ«bniekiem un ticamiem/maz ticamiem atribÅ«tiem, ir nodroÅ”inÄta iespÄja izsaukt virtuÄlÄs funkcijas nosacÄ«juma izteiksmÄs. utt.
Lai iespÄjotu C++2a atbalstu, izmantojiet opcijas "-std=c++2a" un "-std=gnu++2a". Pievienoti bitu un versiju galvenes faili libstdc++, kas paredzÄts C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible un std::type_identity iezÄ«mes, stdstd::midler. , std::bind_front,
std::visit, std::is_constant_evaluated un std::assume_aligned, pievienots atbalsts tipam char8_t, ieviesta iespÄja pÄrbaudÄ«t virkÅu prefiksu un sufiksu (sÄkas_ar, beidzas_ar);
Pievienots atbalsts jauniem ARM procesoriem
Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE un Neoverse N1. Pievienots atbalsts instrukcijÄm, kas ieviestas Armv8.3-A darbam ar kompleksajiem skaitļiem, pseidogadÄ«juma skaitļu Ä£enerÄÅ”anai (rng) un atmiÅas marÄ·ÄÅ”anai (memtag), kÄ arÄ« instrukcijas, lai bloÄ·Ätu uzbrukumus, kas saistÄ«ti ar zaru prognozÄÅ”anas vienÄ«bas spekulatÄ«vu izpildi un darbÄ«bu. . AArch64 arhitektÅ«rai ir pievienots aizsardzÄ«bas režīms kaudzes un kaudzes krustojumi (ā-fstack-clash-protectionā). Lai izmantotu Armv8.5-A arhitektÅ«ras iespÄjas, ir pievienota opcija ā-march=armv8.5-aā.
TajÄ ir iekļauta aizmugursistÄma koda Ä£enerÄÅ”anai AMD GPU, pamatojoties uz GCN mikroarhitektÅ«ru. ÄŖstenoÅ”ana paÅ”laik aprobežojas ar viena pavediena lietojumprogrammu kompilÄciju (atbalsts vairÄku pavedienu aprÄÄ·inu veikÅ”anai, izmantojot OpenMP un OpenACC, tiks piedÄvÄts vÄlÄk) un GPU Fiji un Vega 10 atbalstu;
Pievienota jauna aizmugursistÄma procesoriem OpenRISC;
Pievienota aizmugure procesoriem C-SKY V2, ko ražo Ķīnas uzÅÄmums ar tÄdu paÅ”u nosaukumu dažÄdÄm patÄriÅa ierÄ«cÄm;
Visas komandrindas opcijas, kas darbojas ar baitu vÄrtÄ«bÄm, atbalsta sufiksus kb, KiB, MB, MiB, GB un GiB;
ÄŖstenots opcija ā-flive-patching=[inline-only-static|inline-clone]ā ļauj sasniegt droÅ”u kompilÄciju reÄllaika ielÄpu sistÄmÄm, pateicoties daudzlÄ«meÅu kontrolei pÄr starpprocedÅ«ru (IPA) optimizÄcijas;
Pievienota opcija "--completion", lai precÄ«zi kontrolÄtu opciju pabeigÅ”anu, lietojot bash;
Diagnostikas rÄ«ki nodroÅ”ina avota teksta fragmentu displejus, norÄdot rindas numuru un vizuÄli iezÄ«mÄjot saistÄ«to informÄciju, piemÄram, operandu veidus. Lai atspÄjotu rindu numuru un etiÄ·eÅ”u rÄdÄ«Å”anu, tiek nodroÅ”inÄtas opcijas ā-fno-diagnostics-show-line-numbersā un ā-fno-diagnostics-show-labelsā;
IzvÄrsts rÄ«ki kļūdu diagnosticÄÅ”anai C++ kodÄ, uzlabota informÄcijas lasÄmÄ«ba par kļūdu cÄloÅiem un problemÄtisko parametru izcelÅ”ana;
Pievienota opcija ā-fdiagnostics-format=jsonā, kas ļauj Ä£enerÄt diagnostikas izvadi maŔīnlasÄmÄ formÄtÄ (JSON);
Pievienotas jaunas profilÄÅ”anas opcijas ā-fprofile-filter-filesā un ā-fprofile-exclude-filesā, lai atlasÄ«tu apstrÄdÄjamos avota failus;
Uzlabota izvade "-fopt-infoĀ» (detalizÄta informÄcija par pievienotajÄm optimizÄcijÄm). Pievienoti jauni prefiksi "optimizÄts" un "izlaists", papildus iepriekÅ” pieejamajam prefiksam "piezÄ«me". Pievienota informÄcijas izvade par lÄmumu pieÅemÅ”anu attiecÄ«bÄ uz ciklu izvÄrÅ”anu un vektorizÄciju;
Pievienota opcija ā-fsave-optimization-recordā, kad tÄ ir norÄdÄ«ta, GCC saglabÄ SRCFILE.opt-record.json.gz failu ar aprakstu par lÄmumiem par noteiktu optimizÄciju izmantoÅ”anu. JaunÄ opcija atŔķiras no ā-fopt-infoā režīma, iekļaujot papildu metadatus, piemÄram, informÄciju par profilu un iekļautajÄm Ä·ÄdÄm;
Pievienotas opcijas ā-fipa-stack-alignmentā un ā-fipa-reference-addressableā, lai kontrolÄtu steka lÄ«dzinÄÅ”anu un adresÄcijas režīmu (tikai rakstÄ«Å”anas vai lasÄ«Å”anas-precÄ«zas) izmantoÅ”anu statiskajiem mainÄ«gajiem starpprocedÅ«ru optimizÄcijas laikÄ;
Fortran valodai ir ieviests pilns asinhronÄs ievades/izvades atbalsts;
Solaris 10 (*-*-solaris2.10) un Cell/BE (Cell Broadband Engine SPU) platformu atbalsts ir novecojis un tiks noÅemts nÄkamajÄ lielajÄ laidienÄ. Atbalsts Armv2, Armv3, Armv5 un Armv5E arhitektÅ«rÄm ir pÄrtraukts. Intel MPX (atmiÅas aizsardzÄ«bas paplaÅ”inÄjumu) atbalsts ir pÄrtraukts.