Ukukhutshwa kwe-GCC 9 compiler suite

Emva konyaka wophuhliso ipapashiwe ukukhululwa kweseti yasimahla yabaqulunqi GCC 9.1, ukukhutshwa kokuqala okukhulu kwisebe elitsha le-GCC 9.x. Ngokwenxa ye inkqubo entsha amanani okukhululwa, inguqulo ye-9.0 isetyenziswe kwinkqubo yophuhliso, kwaye kungekudala ngaphambi kokukhululwa kwe-GCC 9.1, isebe le-GCC 10.0 lalisele lixutywe, ngesiseko apho ukukhululwa okubalulekileyo okulandelayo, i-GCC 10.1, kuya kwenziwa.

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 utshintsho:

  • 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-GCC iqalile emva ngo-2011, kodwa irhuqelwe 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 yongeziwe Ukudibana 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;

    Ukukhutshwa kwe-GCC 9 compiler suite

  • Yandisiwe izixhobo zokuxilonga iimpazamo kwikhowudi ye-C ++, ukuphuculwa kokufundwa kolwazi malunga nezizathu zeempazamo kunye nokugqamisa iiparitha ezinengxaki;

    Ukukhutshwa kwe-GCC 9 compiler suite

  • 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 neentlobo ikopi;
  • 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

Yongeza izimvo