GCC 10 kompilatsioonikomplekti vÀljaanne

PĂ€rast aastat arendust avaldatud avaldatud tasuta koostaja komplekt GCC 10.1, esimene mĂ€rkimisvÀÀrne vĂ€ljaanne uues GCC 10.x harus. Vastavalt uuele vĂ€ljaannete nummerdamise sĂŒsteemile, versioon 10.0 kasutati arenduse kĂ€igus ja vahetult enne GCC 10.1 vĂ€ljalaskmist hargnes juba GCC 11.0 haru, mille alusel koostatakse jĂ€rgmine oluline vĂ€ljaanne GCC 11.1.

GCC 10.1 on tĂ€helepanuvÀÀrne paljude C++ keele uuenduste rakendamise poolest, mida arendatakse C++20 standardi jaoks, samuti tulevase C keele standardi (C2x) seotud tĂ€iustuste, uute optimeeringute, millel on kompilaatori tagaplaanid, ja eksperimentaalse toetamisega staatilise analĂŒĂŒsi reĆŸiim. Lisaks viidi uue haru ettevalmistamise kĂ€igus projektiga lĂ€bi reposti migreerimine SVN-ist Git-i.

Peamised muudatused:

  • Lisatud eksperimentaalne staatilise analĂŒĂŒsi reĆŸiim „-fanalyzer«, mis teostab ressursimahukat protseduuridevahelist analĂŒĂŒsi koodi tĂ€itmise radadest ja andmevoogudest programmis. ReĆŸiim suudab kompileerimise etapis tuvastada selliseid probleeme nagu kahekordne free() funktsiooni kutsumine sama mĂ€lu piirkonna jaoks, failide deskriptorite lekked, nullviidatud nĂ€idikute dereferentsimine ja edastamine, vabastatud mĂ€lublokkidele juurdepÀÀs, mittealgoritmitud vÀÀrtuste kasutamine jne. Uue reĆŸiimi rakendamine OpenSSL koodile on juba vĂ”imaldanud tuvastada ohtliku haavatavuse.
  • Parandatud on vaheprotseduuride optimeerimist. IPA-SRA (vaheprotseduuride skalaarsed asendused ĂŒhiste vÀÀrtuste jaoks) lĂ€bivaatamine on sĂ€ttitud töötama sidumise ajal ning nĂŒĂŒd kĂ”rvaldab see ka arvutatud ja tagastatud kasutamata vÀÀrtused. OptimeerimisreĆŸiimis „-O2“ on aktiveeritud valik „-finline-functions“, mis on ĂŒmber seadistatud selleks, et genereerida kompaktsemat koodi, mitte arvestada tĂ€itmise efektiivsust. Funktsioonide inline-lahtiseletamise heuristika on kiirenenud. Heuristika inline-lahtiseletamise ja funktsioonide kopeerimine saavad nĂŒĂŒd kasutada vÀÀrtuste vahemike teavet, et ennustada individuaalsete transformatsioonide efektiivsust. C++ puhul on suurenenud tĂŒĂŒpide pĂ”histe aliaside analĂŒĂŒsi tĂ€psus.
  • Sidumise etapis (LTO) on optimeerimised laienenud. Uus kĂ€ivitatav fail on lisatud. lto-dump LTO-baytkoodiga objektifailide teabe lĂ€htestamiseks. LTO lĂ€henemiste kĂ€igus on automaatselt mÀÀratud samal ajal töötavate make-ĂŒlesannete arv, ning kui seda ei Ă”nnestu tuvastada, kasutatakse CPU tuumade arvu teavet paralleliseerimise tegurina. LTO baytkoodi tihendamine zstd algoritmi abil on nĂŒĂŒd vĂ”imalik.
  • On parendatud koodi profiliseerimise pĂ”hjal optimeerimise mehhanismi (PGO — profiliseerimisega juhitud optimeerimine), mis genereerib pĂ”hjalikuma koodi, tuginedes koodi tĂ€itmise omaduste analĂŒĂŒsile. Profiliseerimise haldamine kompileerimise ja 'kuuma'/'kĂŒlma' koodi jagamise kĂ€igus on parendatud. Valikuga '-fprofile-values' on nĂŒĂŒd vĂ”imalik jĂ€lgida kuni 4 profiili vÀÀrtust, nĂ€iteks kaudsete kutsungite jaoks, et pakkuda tĂ€psemat profiili teavet.
  • C, C++ ja Fortran keelte jaoks on jĂ”ustatud paralleelse programmeerimise spetsifikatsioon OpenACC 2.6, mis mÀÀratleb vahendid operatsioonide GPU-le ja spetsialiseeritud protsessoritele, nagu NVIDIA PTX, edastamiseks. Standardi rakendamine on peaaegu lĂ”ppenud. OpenMP 5.0 (Open Multi-Processing), mÀÀratleb API ja meetodite rakendamise teed paralleelse programmeerimise jaoks mitme tuumaga ja hĂŒbriidsetes (CPU+GPU/DSP) sĂŒsteemides, millel on ĂŒhine mĂ€lu ja vektorisĂŒntese plokid (SIMD). Lisatud on sellised vĂ”imalused nagu tingimuslikud laused lastprivate, direktiivid scan ja loop, vĂ€ljendid order ja use_device_addr. OpenMP ja OpenACC jaoks on lisatud toetus operatsioonide ĂŒleviimiseks (offloading) AMD Radeon GPUdele (GCN) neljandas (Fiji) ja viiendas pĂ”lvkonnas (VEGA 10/VEGA 20).
  • C keele perekonna jaoks on lisatud funktsioon „access“ funktsioonide juurdepÀÀsu kirjeldamiseks objektidele, mis on saadetud viidena vĂ”i osutajana, ning nende objektide sidumiseks tĂ€isarvuliste argumentidega, mis sisaldavad teavet objektide suuruse kohta. Koos „access“iga on rakendatud atribuut „type“, et tuvastada ebaĂ”ige juurdepÀÀsu kasutajafunktsioonidest, nĂ€iteks vÀÀrtuste kirjutamine massiivi piiridest vĂ€ljapoole. Samuti on lisatud atribuut „symver“ sĂŒmbolite sidumiseks ELF-failis kindlate versiooninumbritega.
  • Uued hoiatusteated on lisatud:
    • «-Wstring-compare» (lĂŒlitub sisse koos «-Wextra») — hoiatab olukordade eest, kus null vĂ”rreldakse strcmp ja strncmp funktsioonide tulemused, mis on ekvivalentne konstandiga, kuna ĂŒhe argumendi pikkus on suurem kui teise argumendi massiivi suurus.
    • «-Wzero-length-bounds» (lĂŒlitub sisse koos «-Warray-bounds») — hoiatab null-pikkuste massiivide elementide juurde pÀÀsemise eest, mis vĂ”ib pĂ”hjustada teiste andmete ĂŒle kirjutamise.
    • Laienenud hoiatuste «-Warray-bounds», «-Wformat-overflow», «-Wrestrict», «-Wreturn-local-addr» ja «-Wstringop-overflow» puhul on laienenud töödeldud olukordade arv, kus ĂŒletatakse lubatud piirid.
  • Rakendatud on vĂ”imalus otse mÀÀrata laiendatud sĂŒmboleid identifikaatorites, kasutades olemasolevat kodeeringut (vaikeselt UTF-8), mitte UCN (\uNNNN vĂ”i \UNNNNNNNN) sĂŒntaksit. NĂ€iteks:

    static const int π = 3;
    int get_naĂŻve_pi() {
    return π;
    }

  • C keelele on rakendatud hulk uusi vĂ”imalusi, mis arenevad standardi C2X raames (lĂŒlitatakse sisse, kasutades -std=c2x ja -std=gnu2x): lisatud on sĂŒntaks „[[]]“ atribuutide mÀÀratlemiseks, nagu C++-s (nĂ€iteks [[gnu::const]], [[deprecated]], [[fallthrough]] ja [[maybe_unused]]. Lisatud on sĂŒntaks u8” konstantide mÀÀratlemiseks, millel on sĂŒmbolid UTF-8-s.
    Uued makrod on lisatud <float.h>-s. strftime'ile on lisatud asenduse mĂ€rgid „%OB” ja „%Ob”.
  • Vaikimisi on C jaoks rakendatud reĆŸiim „-fno-common”, mis vĂ”imaldab tĂ”hustada juurdepÀÀsu globaalsetele muutujaile mĂ”nedes platvormides.
  • C++-s on ellu viidud umbes 16 muudatust ja uuendust, mis arenevad C++20 standardi raames. Sealhulgas on lisatud mĂ€rksĂ”na „constinit”.
    ja on rakendatud malle laiendamise tugi „kontseptsioonidKonseptsioonid vĂ”imaldavad mÀÀratleda malliparameetrite nĂ”uete kogumi, mis piiravad kompileerimise ajal argumendide kogumit, mida saab kasutada malliparameetritena. Konseptsioone saab kasutada loogiliste vastuolude vĂ€ltimiseks andmetĂŒĂŒpide omaduste vahel, mida kasutatakse mallis, ja sisendparameetrite andmetĂŒĂŒpide omaduste vahel.
  • G++ tagab konstandiobjektide muutmisest tingitud mÀÀramatute kĂ€itumiste tuvastamise constexpr kaudu. Kompilaatori mĂ€lu kasutamine on vĂ€henenud constexpr'i arvutamisel. Uued hoiatusteated «-Wmismatched-tags» ja «-Wredundant-tags» on lisatud.
  • Pakutakse uusi kĂ€surea valikuid:
    • «-fallocation-dce» ĂŒleliigsete «new» ja «delete» operaatorite paaride eemaldamiseks.
    • «-fprofile-partial-training» suuruse optimeerimise vĂ€ljalĂŒlitamiseks koodile, mille osas ei ole tehtud koolitussessiooni.
    • «-fprofile-reproducible» profiili taastatavuse taseme mÀÀramiseks.
    • «-fprofile-prefix-path» ehitusfailide pĂ”hikausta mÀÀratlemiseks lĂ€htekoodist, mida kasutatakse profiilide eraldi genereerimise ajal ( «-fprofile-generate=profile_dir» ja «-fprofile-use=profile_dir»).
  • Hoolekandega seonduvates teadetes on tagatud hĂŒperlinkide nĂ€itamine, mis vĂ”imaldavad pÀÀseda nende vĂ”imaluste dokumentatsioonile. URL-i asendamine toimub valiku „-fdiagnostics-urls” abil.
  • Lisatud on ĐżŃ€Đ”ĐżŃ€ĐŸŃ†Đ”ŃŃĐŸŃ€Ń‹ operaator „__has_builtin„, mida saab kasutada sisseehitatud funktsioonide olemasolu kontrollimiseks.
  • Lisatud uus sisseehitatud funktsioon „__builtin_roundeven”, mille rakendamine pĂ”hineb ISO/IEC TS 18661 standardis tĂ€psustatud ĂŒmaruse funktsioonil. See on sarnane „round” funktsioonile, kuid ĂŒmardab vÀÀrtused ĂŒle 0,5 ĂŒlespoole (suuremale vÀÀrtusele), alla 0,5 allapoole (nullini) ning vÀÀrtuse 0,5 puhul ĂŒmardab sĂ”ltuvalt eelviimase numbri paaritusest.
  • AArch64 arhitektuuri jaoks on lisatud SVE2 laienduse tugi ja SVE (Skaleeritav Vektori Laiendamine) toe parendamine, sealhulgas sisseehitatud funktsioonide ja tĂŒĂŒbid SVE ACLE toeks, on tagatud vektorisatsiooni rakendamine. LSE (Suurte SĂŒsteemide Laiendamine) ja TME (Tehingu MĂ€lulaiend) toed on laienenud. Lisatud on uusimad kĂ€sklused, mis on ettepanekud Armv8.5-A ja Armv8.6-A, sealhulgas juhised juhuslike numbrite genereerimiseks, ĂŒmardamiseks ning mĂ€lusildade sidumiseks.
    bfloat16 ja matriitside korrutamiseks. Protsessorite toimetamine on lisatud
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 ja
    Marvell ThunderX3.
  • ARM32-le on lisatud ABI FDPIC tugi (64-bitised juhtnupud funktsioonidele). 64-bitiste tĂ€isarvute operatsioonide töötlemine on ĂŒmber tehtud ja optimeeritud. Lisatud CPU tugi
    Arm Cortex-A77,
    Arm Cortex-A76AE ja
    Arm Cortex-M35P. Laiendatud ACLE kÀskude tuge andmete töötlemiseks, sealhulgas 32-bitine SIMD, 16-bitine korrutamine, aritmeetika minimaalsete ja maksimaalsete vÀÀrtuste fikseerimisega ning muud vahendid DSP-algoritmide optimeerimiseks. Lisatud eksperimentaalne toetus ACLE CDE (Custom Datapath Extension) kÀskudele.
  • Koodi genereerimine ja vektoriseerimine on oluliselt paranenud AMD GPU tagaplaanil, mis pĂ”hineb GCN mikroarhitektuuril.
  • AVR arhitektuurile on lisatud XMEGA-sarnaste seadmete tugi
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209, ATmega4808 ja ATmega4809.
  • IA-32/x86-64 arhitektuuridele on lisatud uus Intel ENQCMD kĂ€skude komplekti laiendus (-menqcmd). Lisatud CPU tugi Intel Cooperlake (-march=cooperlake, sisaldab ISA laiendust AVX512BF16) ja Tigerlake (-march=tigerlake, sisaldab ISA laiendusi MOVDIRI, MOVDIR64B ja AVX512VP2INTERSECT).
  • HSAIL (Heterogeense SĂŒsteemi Arhitektuuri Vahekeel) toe lĂ”petamine kuulutati vĂ€lja ja see vĂ”ib tulevaste vĂ€ljaannete raames kaduda, seoses heterogeensete arvutus sĂŒsteemide arhitektuuriga HSA.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster