Útgáfa af GCC 10 þýðandasvítunni

Eftir eins árs þróun birt gefa út ókeypis sett af þýðendum GCC 10.1, fyrsta stóra útgáfan í nýju GCC 10.x útibúinu. Í samræmi við nýtt kerfi útgáfunúmer, útgáfa 10.0 var notuð í þróunarferlinu, og stuttu fyrir útgáfu GCC 10.1 hafði GCC 11.0 útibúið þegar tekið sig saman, á grundvelli þess yrði næsta mikilvæga útgáfa, GCC 11.1, mynduð.

GCC 10.1 er áberandi fyrir innleiðingu margra nýjunga í C++ tungumálinu sem þróað var fyrir C++20 staðalinn, endurbætur tengdar framtíðar C tungumálastaðlinum (C2x), nýjar hagræðingar í þýðanda bakenda og tilraunastuðning. kyrrstöðugreiningarhamur. Að auki, við undirbúning nýs útibús, flutti verkefnið geymsluna frá SVN til Git.

Helstu breytingar:

  • Bætt við tilraunahamur kyrrstöðugreiningar "-fanagreiningartæki“, sem framkvæmir auðlindafreka aðferðagreiningu á keyrsluleiðum kóða og gagnaflæði í forriti. Stillingin er fær um að greina vandamál á samantektarstigi, svo sem tvöföld símtöl í free() aðgerðina fyrir eitt minnissvæði, skráarlýsingarleka, frávísun og framhjá núllbendingum, aðgang að losuðum minnisblokkum, notkun óuppsettra gilda o.s.frv. Notkun nýja hamsins fyrir OpenSSL kóða hefur þegar gert það mögulegt að bera kennsl á hættulegt varnarleysi.
  • Bætt hagræðingu á milli verklagsreglna. IPA-SRA (Interprocedural Scalar Shared Replacement) passinn hefur verið endurhannaður til að virka á bindingartíma og, meðal annars, fjarlægir nú reiknuð og skilað ónotuð gildi. Í „-O2“ fínstillingarstillingunni er „-finline-functions“ valmöguleikinn virkur, sem er stilltur aftur til að hygla fyrirferðarmeiri kóða fram yfir framkvæmdarafköst. Vinnu heuristic fyrir innleiðingu aðgerða í línu hefur verið hraðað. Inline stækkun og virkni klónun heuristics geta nú notað upplýsingar um gildissvið til að spá fyrir um virkni einstakra umbreytinga. Fyrir C++ hefur nákvæmni tegundatengdrar samheitaþáttunar verið bætt.
  • Enhanced Linking Time Optimizations (LTO). Nýtt keyrsluefni bætt við Lto-dump til að endurstilla upplýsingar um hlutskrár með LTO bækikóða. Samhliða LTO-passir ákvarða sjálfkrafa fjölda vinnsluverkefna sem eru í gangi samtímis og, ef ekki er hægt að ákvarða þau, notarðu upplýsingar um fjölda CPU-kjarna sem samhliðaþátt. Bætti við hæfileikanum til að þjappa LTO bækikóða með zstd reikniritinu.
  • Hagræðingarkerfið sem byggir á niðurstöðum kóðasniðs (PGO - Profile-guided optimization) hefur verið endurbætt, sem býr til ákjósanlegri kóða sem byggir á greiningu á einkennum kóðaframkvæmdar. Bætt viðhald á prófílnum meðan á samantekt stendur og heitur/kaldur kóða aðskilnaður. Í gegnum valkostinn "-fprófíl-gildi» getur nú fylgst með allt að 4 prófílgildum, til dæmis fyrir óbein símtöl og veita nákvæmari upplýsingar um prófílinn.
  • Samhliða forritunarforskrift útfærð fyrir C, C++ og Fortran tungumál OpenACC 2.6, sem skilgreinir verkfæri til að afhlaða aðgerðum á GPU og sérhæfðum örgjörvum eins og NVIDIA PTX. Innleiðingu staðalsins er nánast lokið Opnaðu MP 5.0 (Open Multi-Processing), sem skilgreinir API og aðferðir við að beita samhliða forritunaraðferðum á fjölkjarna og blendingakerfi (CPU+GPU/DSP) með sameiginlegu minni og vektoriseringareiningum (SIMD). Bætt við eiginleikum eins og lastprivate skilyrt, skanna og lykkja tilskipanir, röð og use_device_addr tjáning. Fyrir OpenMP og OpenACC hefur verið bætt við stuðningi við afhleðsluaðgerðir á fjórðu kynslóð (Fiji) og fimmtu kynslóð AMD Radeon (GCN) GPU (VEGA 10/VEGA 20).
  • Fyrir tungumál af C fjölskyldunni hefur „aðgangur“ fallinu verið bætt við til að lýsa aðgangi fallsins að hlutum sem eru liðnir með tilvísun eða bendili og til að tengja slíka hluti við heiltölu rök sem innihalda upplýsingar um stærð hlutanna. Til að vinna í tengslum við „aðgang“ er „tegund“ eigindin útfærð til að greina rangan aðgang frá notendaaðgerðum, til dæmis þegar gildi eru skrifuð á svæði utan marka fylkisins. Einnig er bætt við "symver" eigindinni til að tengja tákn í ELF skrá við ákveðin útgáfunúmer.
  • Nýjar viðvaranir bætt við:
    • „-Wstring-compare“ (virkjað með „-Wextra“) - varar við tilvist tjáninga þar sem núll er borið saman við niðurstöðuna af því að kalla strcmp og strncmp föllin, sem jafngildir fasta vegna þess að lengd af einni röksemdafærslu er stærri en stærð fylkisins í annarri röksemdinni.
    • "-Wzero-length-bounds" (virkt með "-Warray-bounds") - varar við því að fá aðgang að fylkisþáttum með núll lengd, sem getur leitt til þess að yfirskrifa önnur gögn.
    • Viðvaranirnar „-Warray-bounds“, „-Wformat-overflow“, „-Wrestrict“, „-Wreturn-local-addr“ og „-Wstringop-overflow“ hafa verið stækkaðar til að auka fjölda tilvika utan marka. sem afgreitt er.
  • Útfærði möguleikann á að tilgreina breiða stafi beint í auðkennum með því að nota núverandi kóðun (UTF-8 sjálfgefið) frekar en UCN merkingu (\uNNNN eða \UNNNNNNNNN). Til dæmis:

    static const int π = 3;
    int get_naïve_pi() {
    skila π;
    }

  • Fyrir C tungumálið hefur hluti af nýjum eiginleikum sem þróaðir eru innan C2X staðalsins verið innleiddir (virkjaður með því að tilgreina -std=c2x og -std=gnu2x): stuðningur við "[[]]" setningafræði hefur birst til að skilgreina eiginleika eins og í C++ (til dæmis [[gnu ::const]], [[úreldað]], [[fallthrough]] og [[kannski_ónotað]]. Bætti við stuðningi við „u8“ setningafræði til að skilgreina fasta með UTF-8 stöfum.
    Nýjum fjölvi bætt við . Bætti "%OB" og "%Ob" skiptingum við strftime.

  • Sjálfgefin stilling fyrir C er "-fno-common", sem gerir kleift að fá skilvirkari aðgang að alþjóðlegum breytum á sumum kerfum.
  • Fyrir C++ hafa um 16 breytingar og nýjungar verið innleiddar, þróaðar í C++20 staðlinum. Þar með talið viðbætt leitarorði „constinit“
    og stuðningur við sniðmátsviðbætur hefur verið innleiddur "hugtök". Hugtök gera þér kleift að skilgreina sett af kröfum um sniðmátsfæribreytur sem takmarkar á samsetningartíma safnið af rökum sem hægt er að samþykkja sem sniðmátsfæribreytur. Hugtökin er hægt að nota til að forðast rökrétt ósamræmi milli eiginleika gagnategundanna sem notaðar eru innan sniðmátsins og gagnategundareiginleika inntaksbreytanna.

  • G++ veitir greiningu á óskilgreindri hegðun sem orsakast af því að breyta stöðugum hlutum í gegnum constexpr. Minni minnisnotkun þýðandans við útreikning á constexpr. Bætt við nýjum viðvörunum "-Wmismatched-tags" og "-Wredundant-tags".
  • Nýir skipanalínuvalkostir hafa verið lagðir til:
    • "-fallocation-dce" til að fjarlægja óþarfa pör af "nýjum" og "eyða" rekstraraðila.
    • „-fprofile-partial-training“ til að slökkva á stærðarfínstillingu fyrir kóða sem er ekki með þjálfunarhlaup.
    • "-fprofile-reproducible til að stjórna stigi endurgerðanleika sniðs.
    • "-fprofile-prefix-path" til að skilgreina grunnupprunauppbyggingarskrána sem notuð er fyrir aðskilda prófílgerð (fyrir "-fprofile-generate=profile_dir" og "-fprofile-use=profile_dir").
  • Í viðvörunartexta fyrir nefnda valkosti eru stiklar sem gera þér kleift að fara í skjölin fyrir þessa valkosti. Skipting vefslóða er stjórnað með "-fdiagnostics-urls" valkostinum.
  • Forvinnsluforritara bætt við "__hefur_innbyggt", sem hægt er að nota til að athuga með innbyggðar aðgerðir.
  • Bætt við nýrri innbyggðri aðgerð „__builtin_roundeven“ með útfærslu á námundunaraðgerðinni sem er skilgreind í ISO/IEC TS 18661 forskriftinni, svipað og „round“, en námundar hluta meira en 0.5 upp (að hærra gildi), minna en 0.5 - niður (í núll) og jafnt og 0.5 - frá jöfnuði næstsíðasta tölustafsins.
  • Fyrir AArch64 arkitektúrinn hefur stuðningur við SVE2 viðbótina verið bætt við og stuðningur við SVE (Scalable Vector Extension) hefur verið bættur, þar á meðal bættur stuðningur við innbyggðar SVE ACLE aðgerðir og gerðir, og notkun vigurvæðingar. Stuðningur við LSE (Large System Extensions) og TME (Transactional Memory Extension) hefur verið aukinn. Bætt við nýjum leiðbeiningum sem lagðar eru til í Armv8.5-A og Armv8.6-A, þar á meðal leiðbeiningar fyrir slembitölumyndun, námundun, bindingu minnismerkja,
    bfloat16 og fylkisföldun. Bætt við örgjörvastuðningi
    Arm Cortex-A77,
    Armur Cortex-A76AE,
    Arm Cortex-A65,
    Armur Cortex-A65AE,
    Arm Cortex-A34 og
    Marvell ThunderX3.

  • Bætti við stuðningi við ABI FDPIC (32 bita virknibendingar) fyrir ARM64. Endurhannað og fínstillt vinnsla á 64 bita heiltöluaðgerðum. Bætt við CPU stuðningi
    Arm Cortex-A77,
    Armur Cortex-A76AE og
    Armur Cortex-M35P. Aukinn stuðningur við ACLE gagnavinnsluleiðbeiningar, þar á meðal 32 bita SIMD, 16 bita margföldun, latch reikning og aðrar fínstillingar DSP reiknirit. Bætti við tilraunastuðningi fyrir ACLE CDE (Custom Datapath Extension) leiðbeiningar.

  • Verulega endurbætt kóðagerð og vektormyndun í bakenda fyrir AMD GPU sem byggir á GCN örarkitektúrnum.
  • Bætti við stuðningi við XMEGA-lík tæki fyrir AVR arkitektúr
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808ga, ATmega809ga, ATmega1608ga, 1609 3208, ATmega3209, ATmega4808 4809, ATmegaXNUMX og ATmegaXNUMX.

  • Nýja Intel ENQCMD kennslusett arkitektúr viðbót (-menqcmd) hefur verið bætt við fyrir IA-32/x86-64 arkitektúra. Bætt við stuðningi við Intel Cooperlake (-march=cooperlake, inniheldur AVX512BF16 ISA viðbótina) og Tigerlake (-march=tigerlake, inniheldur MOVDIRI, MOVDIR64B og AVX512VP2INTERSECT ISA viðbætur) örgjörva.
  • Útfærsla á HSAIL (Heterogeneous System Architecture Intermediate Language) fyrir ólík tölvukerfi byggð á HSA arkitektúr hefur verið úrelt og verður líklega fjarlægð í framtíðarútgáfu.

Heimild: opennet.ru

Bæta við athugasemd