Ukukhishwa kwe-GCC 10 compiler suite

Ngemva konyaka wentuthuko eshicilelwe ukukhululwa kwesethi yamahhala yabahlanganisi I-GCC 10.1, ukukhishwa kokuqala okukhulu egatsheni elisha le-GCC 10.x. Ngokuvumelana ne uhlelo olusha izinombolo zokukhishwa, inguqulo engu-10.0 yasetshenziswa enqubweni yokuthuthukiswa, futhi ngaphambi nje kokukhululwa kwe-GCC 10.1, igatsha le-GCC 11.0 lase livele lihlukene, ngesisekelo okwakuzokwakhiwa ukukhululwa okubalulekile okulandelayo, i-GCC 11.1.

I-GCC 10.1 iphawuleka ngokuqaliswa kokuqanjwa okuningi ngolimi lwe-C++ oluthuthukiswe izinga le-C++20, ukuthuthukiswa okuhlobene nezinga lesikhathi esizayo lolimi lwe-C (C2x), ukulungiselelwa okusha kuma-backends womhlanganisi nokusekelwa kokuhlola. imodi yokuhlaziya emile. Ngaphezu kwalokho, ngesikhathi sokulungiswa kwegatsha elisha, iphrojekthi yadlulisela inqolobane isuka ku-SVN yayisa e-Git.

main shintsha:

  • Kwengezwe imodi yokuhlola yokuhlaziya okumile "- umlandeli", eyenza ukuhlaziya okuxubile kwezinsizakusebenza kwezindlela zokwenza ikhodi kanye nokugeleza kwedatha kuhlelo. Imodi iyakwazi ukubona izinkinga esigabeni sokuhlanganisa, njengezingcingo eziphindwe kabili zomsebenzi wamahhala() wendawo eyodwa yenkumbulo, ukuvuza kwesichazi sefayela, ukususa ireferensi nokudlulisa izikhombi ezingenalutho, ukufinyelela kumabhulokhi enkumbulo akhululiwe, kusetshenziswa amanani angaqaliswanga, njll. Ukusetshenziswa kwemodi entsha yekhodi ye-OpenSSL sekuvele kwenze kwaba nokwenzeka ukuhlonza ubungozi obuyingozi.
  • Ukuthuthukiswa kwe-interprocedural okuthuthukisiwe. Iphasi ye-IPA-SRA (Interprocedural Scalar Shared Replacement) iklanywe kabusha ukuze isebenze ngesikhathi sokubopha futhi, phakathi kwezinye izinto, manje ikhipha amanani ekhompuyutha futhi abuyiselwe angasetshenzisiwe. Kumodi yokuthuthukisa ye-"-O2", inketho ethi "-finline-functions" ivuliwe, ebuyiselwa ukuze ivune ikhodi ehlangene ngaphezu kokusebenza. Umsebenzi we-heuristic wokuthunyelwa komsebenzi okulayini usheshisiwe. Ukunwetshwa okusemgqeni kanye ne-heuristics ye-cloning yokusebenza manje ingasebenzisa ulwazi olumayelana nobubanzi bevelu ukubikezela ukusebenza kahle koshintsho ngalunye. Ku-C++, ukunemba kokuncozululwa kwe-alias okusekelwe ohlotsheni kuthuthukisiwe.
  • Ukuthuthukiswa Kwesikhathi Esithuthukisiwe (i-LTO). Kwengezwe okusha okusebenzisekayo ukulahla ukuze usethe kabusha ulwazi olumayelana namafayela ento nge-bytecode ye-LTO. Ukudlula kwe-LTO okuhambisanayo kunquma ngokuzenzakalelayo inani lemisebenzi eyenziwa ngesikhathi esisodwa futhi, uma ingenakunqunywa, sebenzisa ulwazi olumayelana nenani lama-CPU cores njengento ehambisanayo. Kwengezwe amandla okucindezela i-LTO bytecode usebenzisa i-algorithm ye-zstd.
  • Indlela yokuthuthukisa esuselwe kumiphumela yekhodi yephrofayela (i-PGO - Ukuthuthukisa okuqondiswa yiphrofayela) ithuthukisiwe, ekhiqiza ikhodi elunge kakhulu esekelwe ekuhlaziyweni kwezici zokwenza ikhodi. Ukugcinwa kwephrofayili okuthuthukisiwe ngesikhathi sokuhlanganiswa kanye nokuhlukaniswa kwekhodi eshisayo/ebandayo. Ngenketho "-fprofile-values» manje ingaqapha amanani ephrofayili afika kwangu-4, isibonelo izingcingo ezingaqondile kanye nokuhlinzeka ngolwazi olunembayo lwephrofayili.
  • Ukucaciswa kwezinhlelo ezihambisanayo kusetshenziswe ezilimini ze-C, C++ ne-Fortran I-OpenACC 2.6, echaza amathuluzi okukhipha imisebenzi kuma-GPU namaphrosesa akhethekile njenge-NVIDIA PTX. Ukuqaliswa kwezinga sekuzophela I-OpenMP 5.0 (I-Open Multi-Processing), echaza i-API nezindlela zokusebenzisa izindlela zokuhlela ezihambisanayo ezinhlelweni ze-multi-core ne-hybrid (CPU+GPU/DSP) ezinememori eyabiwe kanye namayunithi e-vectorization (SIMD). Izici ezingeziwe ezifana nezimo zokugcina eziyimfihlo, iziqondiso zokuskena neziluphu, i-oda nezinkulumo zokusebenzisa_idevice_addr. Ku-OpenMP ne-OpenACC, ukwesekwa kungeziwe ukuze kulayishwe imisebenzi esizukulwaneni sesine (i-Fiji) kanye ne-AMD Radeon (GCN) GPU yesizukulwane sesihlanu (VEGA 10/VEGA 20).
  • Ezilwimini zomndeni wakwa-C, umsebenzi "wokufinyelela" ungeziwe ukuze uchaze ukufinyelela komsebenzi ezintweni eziphasiswe ngereferensi noma isikhombisi, nokuhlobanisa izinto ezinjalo nama-agumenti enamba aqukethe ulwazi mayelana nosayizi wezinto. Ukuze usebenze ngokuhambisana "nokufinyelela", isibaluli "sohlobo" sisetshenziswa ukuze kutholwe ukufinyelela okungalungile kusuka emisebenzini yomsebenzisi, isibonelo, lapho kubhalwa amanani endaweni engaphandle kwemingcele yamalungu afanayo. Okuphinde kwengezwe isibaluli se-"symver" sokuhlobanisa izimpawu kufayela le-ELF elinezinombolo zenguqulo ethile.
  • Izixwayiso ezintsha zengeziwe:
    • “-Wstring-compare” (inikwe amandla ngokuthi “-Wextra”) - ixwayisa ngobukhona bezinkulumo lapho u-zero eqhathaniswa nomphumela wokubiza imisebenzi ye-strcmp ne-strncmp, okulingana nokungaguquki ngenxa yokuthi ubude ye-agumenti eyodwa inkulu kunosayizi wamalungu afanayo ku-agumenti yesibili .
    • I-"-Wzero-length-bounds" (inikwe amandla ngokuthi "-Warray-bounds") - ixwayisa ngokufinyelela kumalungu afanayo anobude obunguziro, okungase kuholele ekubhaleni phezu kweminye idatha.
    • Izixwayiso ze-“-Warray-bounds”, “-Wformat-overflow”, “-Wrestrict”, “-Wreturn-local-addr” kanye “ne-Wstringop-overflow” zinwetshiwe ukuze kwandiswe inani lezimo eziphuma ngaphandle kwemingcele. eziphathwayo.
  • Kusetshenziswe ikhono lokucacisa ngokuqondile izinhlamvu ezibanzi kuzihlonzi kusetshenziswa umbhalo wekhodi wamanje (UTF-8 ngokuzenzakalelayo) kunenothisi ye-UCN (\uNNNN noma \UNNNNNNNNN). Ngokwesibonelo:

    i-static const int π = 3;
    int get_naïve_pi() {
    buyisela π;
    }

  • Olimini lwe-C, ingxenye yezici ezintsha ezithuthukiswe ngaphakathi kwezinga le-C2X isetshenzisiwe (inikwe amandla ngokucacisa -std=c2x kanye -std=gnu2x): usekelo lwe-syntax ethi "[[]]" ivele ukuze ichaze izimfanelo njengaku. C++ (ngokwesibonelo, [[gnu ::const]], [[hoxisiwe]], [[fallthrough]] kanye [[mhlawumbe_engasetshenzisiwe]]. Kwengezwe usekelo lwe-syntax ethi "u8" yokuchaza ama-constants anezinhlamvu ze-UTF-8.
    Kwengezwe amamakhro amasha ku . Kwengezwe "%OB" kanye "%Ob" esikhundleni se-strftime.

  • Imodi ezenzakalelayo ye-C ithi "-fno-common", evumela ukufinyelela okuphumelelayo kokuguquguquka komhlaba kwamanye amapulatifomu.
  • Ku-C++, izinguquko ezingaba ngu-16 nezinto ezintsha seziqalisiwe, zathuthukiswa ngezinga le-C++20. Kubandakanya igama elingukhiye elengeziwe elithi “constit”
    futhi ukusekelwa kwezandiso zesifanekiso sekwenziwe "imiqondo". Imiqondo ikuvumela ukuthi uchaze isethi yezidingo zepharamitha yesifanekiso, okuthi ngesikhathi sokuhlanganisa, ikhawulele isethi yezimpikiswano ezingamukelwa njengemingcele yesifanekiso. Imiqondo ingasetshenziswa ukuze kugwenywe ukungqubuzana okunengqondo phakathi kwezakhiwo zezinhlobo zedatha ezisetshenziswa ngaphakathi kwesifanekiso kanye nezakhiwo zohlobo lwedatha zamapharamitha okokufaka.

  • I-G++ inikeza ukutholwa kokuziphatha okungachazwanga okubangelwa ukushintsha izinto ezingaguquki nge-constexpr. Kuncishiswe ukusetshenziswa kwenkumbulo ngumhlanganisi lapho kubalwa i-constexpr. Kwengezwe izexwayiso ezintsha "-Wmismatched-tags" kanye "-Wredundant-tags".
  • Izinketho zomugqa womyalo omusha ziphakanyiswe:
    • "-fallocation-dce" ukususa amapheya angadingekile ama-opharetha "amasha" kanye "nokususa".
    • "-fprofile-partial-training" ukuze ukhubaze ukulungiselelwa kosayizi wekhodi engenakho ukuqeqeshwa.
    • "-fprofile-reproducible ukulawula izinga lokuphindaphinda kwephrofayela.
    • "-fprofile-prefix-path" ukuchaza inkomba yokwakha yomthombo oyisisekelo esetshenziselwa ukukhiqiza iphrofayela ehlukene (ye-"-fprofile-generate=profile_dir" kanye "-fprofile-use=profile_dir").
  • Embhalweni oyisixwayiso wezinketho ezishiwo, izixhumanisi zinikezwa ezikuvumela ukuthi uye kumadokhumenti alezi zinketho. Ukushintshwa kwe-URL kulawulwa kusetshenziswa inketho ethi "-fdiagnostics-urls".
  • Kwengezwe u-opharetha we-preprocessor "__wakhile", engasetshenziswa ukuhlola imisebenzi eyakhelwe ngaphakathi.
  • Kwengezwe umsebenzi omusha owakhelwe ngaphakathi othi "__builtin_roundeven" ngokuqalisa umsebenzi wokusondeza ochazwe ekucacisweni kwe-ISO/IEC TS 18661, okufana nokuthi "round", kodwa ingxenye efinyezwayo enkulu kuno-0.5 ukuya phezulu (inani elikhulu), ngaphansi kuka-0.5 - phansi (kuya ku-zero), futhi ilingana no-0.5 - kusukela ekulinganeni kwedijithi engaphambili.
  • Ngokwakhiwa kwe-AArch64, ukusekelwa kwesandiso se-SVE2 kwengeziwe futhi ukusekelwa kwe-SVE ​​(Isandiso Se-Vector Scalable) sekuthuthukisiwe, okuhlanganisa ukwesekwa okwengeziwe kwemisebenzi nezinhlobo ezakhelwe ngaphakathi ze-SVE ​​ACLE, kanye nokusetshenziswa kwe-vectorization. Ukusekelwa kwe-LSE (Izandiso Zesistimu Enkulu) kanye ne-TME (Isandiso Senkumbulo Yokwenziwayo) kunwetshiwe. Kwengezwe imiyalelo emisha ehlongozwayo ku-Armv8.5-A naku-Armv8.6-A, okuhlanganisa imiyalelo yokwenziwa kwezinombolo okungahleliwe, ukuzungezisa, ukubopha ithegi yememori,
    bfloat16 kanye nokuphindaphinda kwe-matrix. Kwengezwe ukwesekwa kwephrosesa
    I-Arm Cortex-A77,
    I-Arm Cortex-A76AE,
    I-Arm Cortex-A65,
    I-Arm Cortex-A65AE,
    I-Arm Cortex-A34 kanye
    I-Marvell ThunderX3.

  • Usekelo olungeziwe lwe-ABI FDPIC (izikhombi zokusebenza ezingama-32-bit) ze-ARM64. Ukucutshungulwa okuklanywe kabusha nokuthuthukisiwe kokusebenza kwenombolo engu-64-bit. Kwengezwe ukwesekwa kwe-CPU
    I-Arm Cortex-A77,
    I-Arm Cortex-A76AE kanye
    I-Arm Cortex-M35P. Usekelo olunwetshiwe lwemiyalelo yokucubungula idatha ye-ACLE, okuhlanganisa i-32-bit SIMD, ukuphindaphinda okungu-16-bit, i-latch arithmetic, nokunye ukulungiselelwa kwe-algorithm ye-DSP. Kwengezwe usekelo lokuhlola lwemiyalelo ye-ACLE CDE (Custom Datapath Extension).

  • Ukukhiqizwa kwekhodi okuthuthuke kakhulu kanye nokuvezwa kwe-vector ku-backend ye-AMD GPUs ngokusekelwe ku-GCN microarchitecture.
  • Ukwesekwa okungeziwe kwamadivayisi afana ne-XMEGA okwakhiwa kwe-AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608mega1609 ATmega3208, ATmega3209, ATmega4808, ATmega4809 I-megaXNUMX ne-ATmegaXNUMX.

  • Isandiso esisha se-Intel ENQCMD sesethi yezakhiwo (-menqcmd) sengeziwe sezakhiwo ze-IA-32/x86-64. Usekelo olungeziwe lwe-Intel Cooperlake (-march=cooperlake, luhlanganisa isandiso se-AVX512BF16 ISA) kanye ne-Tigerlake (-march=tigerlake, ihlanganisa ama-CPU e-MOVDIRI, MOVDIR64B kanye ne-AVX512VP2INTERSECT ISA).
  • Ukusetshenziswa kwe-HSAIL (I-Heterogeneous System Architecture Intermediate Language) yamasistimu ekhompuyutha ahlukahlukene asuselwe ekwakhiweni kwe-HSA kuhoxisiwe futhi cishe kuzosuswa ekukhishweni okuzayo.

Source: opennet.ru

Engeza amazwana