Emva konyaka wophuhliso
I-GCC 9.1 iphawuleka ngokuzinzisa inkxaso yomgangatho we-C++17, ukuqhubeka nokuphumeza amandla omgangatho we-C++20 wexesha elizayo (i-codenamed C++2a), ukufakwa kwi-frontend yolwimi lwe-D, inkxaso engaphelelanga ye-OpenMP 5.0 , inkxaso ephantse iphelele ye-OpenACC 2.5, ukwandisa ukulinganiswa kwe-interprocedural optimizations kunye nokulungiswa kwinqanaba elibophezelayo, ukwandiswa kwezixhobo zokuxilonga kunye nokongezwa kwezilumkiso ezitsha, i-backends ye-OpenRISC, i-C-SKY V2 kunye ne-AMD GCN GPU.
Siseko
- Inkxaso eyongeziweyo yolwimi lwenkqubo ye-D. I-GCC ibandakanya i-frontend kunye nomqokeleli
GDC (I-Gnu D Compiler) kunye namathala eencwadi exesha lokusebenza (libphobos), ekuvumela ukuba usebenzise i-GCC eqhelekileyo ukwakha iinkqubo ngolwimi lwenkqubo ye-D. Inkqubo yokwenza inkxaso yolwimi lwe-D kwi-GCCiqalile emva ngo-2011, kodwairhuqelwe phambili ngenxa yesidingo sokuzisa ikhowudi ekuthotyelweni kweemfuno ze-GCC kunye neengxaki ngokugqithiselwa kwamalungelo epropathi enomgangatho ophezulu wokuqonda kwi-Digital Mars, ephuhlisa ulwimi lwenkqubo ye-D; - Uphuculo lwenziwe kwijenereyitha yekhowudi. Umzekelo, ukusetyenziswa kwezicwangciso ezahlukeneyo zokwandisa i-Switch expressions (itafile yokutsiba, uvavanyo lwe-bit, umthi wesigqibo) ngokuxhomekeke kwiimeko ziphunyeziwe. Kongezwe ukukwazi ukuguqula imisebenzi ehambelanayo equka inkcazo yoTshintsho usebenzisa "-ftree-switch-conversion" uphuculo (umzekelo, iseti yeemeko ezifana ne "case 2: how = 205; break; case 3: how = 305; break ;β iya kuguqulwa ibe ngu "100 * njani + 5";
- Uphuculo lweenkqubo eziphuculweyo. Iisetingi zokusasazwa kwe-Inline zilungelelaniselwe iikhowudi ze-C++ zangoku kwaye zandiswe ngeeparamitha ezintsha max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns kunye ne-unlined -ixesha lokucinga. Ukuchaneka okuphuculweyo kunye nobundlongondlongo bokuhlukana kwekhowudi ebandayo / eshushu. Uphuculo lokulinganisa kubukhulu kakhulu
iiyunithi zoguqulo (umzekelo, xa usebenzisa ukulungelelaniswa kwinqanaba lokudibanisa kwiinkqubo ezinkulu); - Indlela yokuphucula esekelwe kwiziphumo zeprofayili yekhowudi (i-PGO-I-Profile-guided optimization) iphuculwe, eyenza ikhowudi ephezulu kakhulu esekelwe kuhlalutyo lweempawu zokwenza ikhowudi. Ukhetho lwesishwankathelo "
-fprofile-ukusetyenziswa " ngoku iquka iindlela zokuphucula "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" kunye "-ftree-loop-distribution". Kususwe ukubandakanywa kwe-histograms kunye nokubala kwiifayile, ezinciphisa ubungakanani beefayile ezineeprofayili (i-histograms ngoku ziveliswa kwi-fly xa kusenziwa ukulungiswa ngexesha lokudibanisa); - ULungelelwaniso lweXesha lokuNxibelela (LTO). Ukwenziwa lula kweentlobo kunikezelwe ngaphambi kokuvelisa umphumo, okwenza kube lula ukunciphisa ubukhulu beefayile ze-LTO, ukunciphisa ukusetyenziswa kwememori kwinqanaba lokubopha, kunye nokuphucula ukuhambelana kwemisebenzi. Inani lezahlulo (-param lto-partitions) liye landa ukusuka kwi-32 ukuya kwi-128, ephucula ukusebenza kwiinkqubo ezinenani elikhulu lemicu ye-CPU. Iparamitha yongeziwe ukulawula inani leenkqubo ze-optimizer
"-param lto-max-streaming-parallelism";Ngenxa yoko, xa kuthelekiswa ne-GCC 8.3, ulungiselelo olwenziwe kwi-GCC 9
kuvunyelwe nciphisa ixesha lokuhlanganiswa kweFirefox 5 kunye neLibreOffice 66 malunga ne-6.2.3%. Ubungakanani beefayile zento behla nge-7%. Ixesha lokubopha kwi-8-core CPU yehle nge-11%. Inqanaba lokuphucula ngokulandelelana kwenqanaba lokudibanisa ngoku li-28% ngokukhawuleza kwaye lidla i-20% yememori engaphantsi. Ukusetyenziswa kwememori yeprosesa nganye yenqanaba elihambelanayo le-LTO lehle nge-30%; - Uninzi lweenkcukacha zeprogram ezihambelanayo ziphunyezwa kwiilwimi zeC, C ++ kunye neFortran
I-OpenACC 2.5 , echaza izixhobo zokukhuphela imisebenzi kwii-GPU kunye neeprosesa ezikhethekileyo ezifana ne-NVIDIA PTX; - Inxalenye yenkxaso yomgangatho iphunyeziwe kwi-C kunye ne-C ++
I-OpenMP 5.0 (Vula i-Multi-Processing), echaza i-API kunye neendlela zokusebenzisa iindlela zeprogram ezifanayo zeC, C ++ kunye neelwimi ze-Fortran kwiinkqubo ezininzi ezingundoqo kunye ne-hybrid (CPU + GPU / DSP) kunye nememori ekwabelwana ngayo kunye neeyunithi ze-vectorization (SIMD) ; - Izilumkiso ezitsha zongezwa kulwimi lwe-C: "
-Waddress-of-packed-ilungu " (ixabiso lesalathisi esingalungelelananga kwilungu elipakisheneyo lesakhiwo okanye umanyano) kunye
Β«-Ixabiso eliqinisekileyo " (xa ufikelela kwimisebenzi yokubala ixabiso elipheleleyo, ukuba kukho umsebenzi ofaneleke ngakumbi kwingxoxo ekhankanyiweyo, umzekelo, iifabs(3.14) kufuneka zisetyenziswe endaweni ye-abs(3.14). Izilumkiso ezitsha zongezwa kwi-C++: "-Ikopi-ikopi",
"-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" kunye "-Wclass-conversion". Izilumkiso ezininzi ezazikho ngaphambili zandisiwe; - Inkxaso yovavanyo eyongeziweyo yenxalenye yomgangatho wexesha elizayo wolwimi lwe-C, enekhowudi ethi C2x. Ukwenza inkxaso yeC2x isebenze, sebenzisa iinketho "-std=c2x" kunye "-std=gnu2x" (ukuvumela izongezo zeGNU). Umgangatho usekwinqanaba lokuqala lophuhliso, ke ngoko, kwizakhono zawo, kuphela ibinzana elithi _Static_assert ngempikiswano enye exhaswayo (_I-Static_assert eneengxoxo ezimbini isemgangathweni kwi-C11);
- Inkxaso yomgangatho we-C ++ 17 ibhengezwe njengezinzile. Ngaphambili, izakhono zolwimi ze-C++17 ziphunyezwe ngokupheleleyo, kwaye kwi-libstdc++, imisebenzi yethala leencwadi echazwe kumgangatho isondele ekuphunyezweni ngokupheleleyo;
- Iqhubekile
umiliselo izinto zexesha elizayo C++2a umgangatho. Umzekelo, ukukwazi ukubandakanya uluhlu ngexesha lokuqalisa longezwe, ukwandiswa kweentetho ze-lambda kuye kwaphunyezwa, inkxaso yamalungu angenanto yezakhiwo zedatha kunye neempawu ezinokwenzeka / ezingenakwenzeka zongezwa, ukukwazi ukubiza imisebenzi ebonakalayo kwiimpawu ezinemiqathango zinikezelwe. , njl.
Ukuvumela inkxaso ye-C++2a, sebenzisa "-std=c++2a" kunye "-std=gnu++2a" onokukhetha kuzo. Kongezwe bit noguqulelo iifayile zeheader kwi libstdc++ ye C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible kunye std::type_identity traits, stdler:pdst: , std::bhind_ngaphambili,
std::ndwendwela, std::is_constant_evaluated kwaye std::cinga_ilungelelanisiwe, inkxaso eyongeziweyo yohlobo lwe-char8_t, iphunyezwe ukukwazi ukujonga isimaphambili kunye nesimamva semitya (iqala_nge, iphela_nge); - Inkxaso eyongeziweyo yeeprosesa ze-ARM ezintsha
I-Cortex-A76, i-Cortex-A55, i-Cortex-A76 DynamIQ enkulu.LITTLE kunye ne-Neoverse N1. Inkxaso eyongeziweyo yemiyalelo eyaziswa kwi-Armv8.3-A yokusebenza ngamanani antsokothileyo, ipseudo-random number generation (rng) kunye nememory tagging (memtag), kunye nemiyalelo yokuthintela uhlaselo olunxulumene nokubulawa okuqikelelwayo kunye nokusebenza kweyunithi yokuxela kwangaphambili kwesebe. . Kuyilo lwe-AArch64, indlela yokukhusela yongeziweUkudibana kwemfumba kunye nemfumba (β-fstack-clash-protectionβ). Ukusebenzisa iimpawu zoyilo lweArmv8.5-A, ukhetho "-march=armv8.5-a" longeziwe. - Ibandakanya i-backend yokuvelisa ikhowudi ye-AMD GPUs esekwe kwi-GCN microarchitecture. Ukuphunyezwa okwangoku kunqunyelwe ekuqulunqweni kwezicelo ezinomsonto omnye (inkxaso yokwenza izibalo ezinemisonto emininzi nge-OpenMP kunye ne-OpenACC iya kunikwa kamva) kunye nenkxaso yeGPU Fiji kunye neVega 10;
- Kongezwe umva omtsha weprosesa
I-OpenRISC ; - Umva wongezwa weprosesa
C-SKY V2 , eveliswe yinkampani yaseTshayina enegama elifanayo kwizixhobo ezahlukeneyo zabathengi; - Zonke iinketho zelayini yomyalelo ezisebenza amaxabiso e-byte ββzixhasa izimamva kb, KB, MB, MiB, GB kunye neGiB;
-
Iphunyeziwe i-β-flive-patching=[inline-only-static|inline-clone]β ukhetho lukuvumela ukuba ufezekise ukuqokelelwa okukhuselekileyo kweenkqubo zokubhaca ngokuphila ngenxa yolawulo lwamanqanaba amaninzi okusetyenziswa kwenkqubo (interprocedural)IPA ) ulungiselelo; - Kongezwe "--ukugqibezela" ukhetho lolawulo olucokisekileyo lokugqiba ukhetho xa usebenzisa i-bash;
- Izixhobo zokuxilonga zibonelela ngemiboniso yezicatshulwa zombhalo womthombo obonisa inombolo yomgca kunye nolwazi oluhambelana nokuphawula okubonakalayo, njengeentlobo ze-operand. Ukukhubaza ukuboniswa kwamanani omgca kunye neelebhile, ukhetho "-fno-diagnostics-show-line-numbers" kunye ne "-fno-diagnostics-show-labels" zinikezelwa;
-
Yandisiwe izixhobo zokuxilonga iimpazamo kwikhowudi ye-C ++, ukuphuculwa kokufundwa kolwazi malunga nezizathu zeempazamo kunye nokugqamisa iiparitha ezinengxaki; - Inketho eyongeziweyo "-fdiagnostics-format=json", evumela ukuvelisa iziphumo zokuxilonga kwifomathi efundeka ngomatshini (JSON);
- Kongezwe ukhetho olutsha lweprofayili "-fprofile-filter-files" kunye "-fprofile-exclude-files" ukukhetha iifayile zomthombo ekufuneka ziqwalaselwe;
- IdilesiSanitizer ibonelela ngesizukulwana sekhowudi yokuqinisekisa ethe kratya yeenguqu ezizenzekelayo, ezinciphisa ukusetyenziswa kwememori yefayile ephunyezwayo ejongwayo;
- Imveliso ephuculweyo kwi "
-fopt-info Β» (ulwazi oluneenkcukacha malunga nokulungiswa okongeziweyo). Kongezwe izimaphambili ezitsha "optimized" kunye "nemised", ukongeza kwisimaphambili esikhoyo ngaphambili "note". Imveliso eyongeziweyo yolwazi malunga nokwenziwa kwezigqibo ekutyhilekeni kwe-inline kunye ne-vectorization yemijikelo; - Kongezwe ukhetho "-fsave-optimization-record", xa lucacisiwe, i-GCC igcina i-SRCFILE.opt-record.json.gz ifayile enenkcazo yezigqibo malunga nokusetyenziswa kolungiselelo oluthile. Inketho entsha ihluke kwimodi ye "-fopt-info" ngokubandakanya imethadatha eyongezelelweyo, njengolwazi malunga neprofayili kunye namatyathanga angaphakathi;
- Izinketho ezongeziweyo "-fipa-stack-alignment" kunye "ne-fipa-reference-addressable" ukulawula ukulungelelaniswa kwe-stack kunye nokusetyenziswa kweendlela zokujongana (ukubhala kuphela okanye ukufundwa ngokuchanekileyo) kwiinguqu ze-static ngexesha lokulungiswa kwe-interprocedural;
- Imisebenzi emitsha eyakhelwe-ngaphakathi yaziswa ukulawula ukubopha uphawu kunye nokuziphatha okunxulumene nokuqikelelwa kwesebe kunye nokuphunyezwa komyalelo oqikelelwayo: "
__isakhiwo_sinophawu Β«,Β«__ukwakhiwa_kulindelwe_nge_kunokwenzeka "Kwaye"__builtin_speculation_safe_value ". Uphawu olutsha luye longezwa kwimisebenzi, iinguqu kunye neentloboikopi ; - Inkxaso epheleleyo yegalelo/imveliso engahambelaniyo iphunyeziwe kulwimi lweFortran;
- Inkxaso ye-Solaris 10 (*-*-solaris2.10) kunye ne-Cell / BE (i-Cell Broadband Engine SPU) iiplatifomu ziye zachithwa kwaye ziya kususwa kukukhululwa okukhulu okulandelayo. Inkxaso yeArmv2, Armv3, Armv5 kunye neArmv5E yezakhiwo ziyekiwe. Inkxaso ye-Intel MPX (Izandiso zoKhuseleko lweMemori) iye yanqunyanyiswa.
umthombo: opennet.ru