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

Eftir árs þróun hefur útgáfa ókeypis GCC 11.1 þýðandasvítunnar verið gefin út, fyrsta marktæka útgáfan í nýju GCC 11.x útibúinu. Undir nýja útgáfunúmerakerfinu var útgáfa 11.0 notuð við þróun, og skömmu fyrir útgáfu GCC 11.1 var GCC 12.0 útibúið þegar skipt út, þaðan sem næsta mikilvæga útgáfa GCC 12.1 verður mynduð.

GCC 11.1 er áberandi fyrir umskipti þess yfir í að nota DWARF 5 villuleitarskráarsniðið sjálfgefið, sjálfgefið innihald C++17 staðalsins ("-std=gnu++17"), verulegar endurbætur á stuðningi við C++20 staðall, tilraunastuðningur fyrir C++23, endurbætur tengdar framtíðar C tungumálastaðlinum (C2x), nýjar hagræðingar á frammistöðu.

Helstu breytingar:

  • Sjálfgefin stillingu fyrir C++ tungumálið hefur verið skipt til að nota C++17 staðalinn (-std=gnu++17) í stað C++14 sem áður var boðið upp á. Það er mögulegt að slökkva á nýju C++17 hegðuninni með vali þegar unnið er úr sniðmátum sem nota önnur sniðmát sem breytu (-fno-new-ttp-matching).
  • Bætti við stuðningi við vélbúnaðarhröðun á AddressSanitizer tólinu, sem gerir þér kleift að ákvarða staðreyndir um aðgang að losuðum minnissvæðum, fara út fyrir mörk úthlutaðs biðminni og nokkrar aðrar tegundir villna þegar unnið er með minni. Vélbúnaðarhröðun er sem stendur aðeins fáanleg fyrir AArch64 arkitektúrinn og er lögð áhersla á notkun þegar Linux kjarna er sett saman. Til að virkja AddressSanitizer vélbúnaðarhröðun við smíði notendarýmishluta hefur fánanum „-fsanitize=hwaddress“ verið bætt við og kjarnafánanum „-fsanitize=kernel-hwaddress“.
  • Þegar villuleitarupplýsingar eru búnar til er DWARF 5 sniðið sjálfgefið notað, sem, samanborið við fyrri útgáfur, gerir kleift að búa til 25% fyrirferðarmeiri villuleitargögn. Fullur stuðningur fyrir DWARF 5 krefst að minnsta kosti binutils útgáfu 2.35.2. DWARF 5 snið er stutt í villuleitarverkfærum síðan GDB 8.0, valgrind 3.17.0, elfutils 0.172 og dwz 0.14. Til að búa til villuleitarskrár með því að nota aðrar útgáfur af DWARF geturðu notað valkostina "-gdwarf-2", "-gdwarf-3" og "-gdwarf-4".
  • Kröfur um þýðendur sem hægt er að nota til að byggja upp GCC hafa verið auknar. Þjálfarinn verður nú að styðja C++11 staðalinn (áður var C++98 krafist), þ.e. Ef GCC 10 var nóg til að byggja GCC 3.4, þá þarf að minnsta kosti GCC 11 til að byggja GCC 4.8.
  • Nafni og staðsetningu skráa til að vista sorp, tímabundnar skrár og viðbótarupplýsingar sem nauðsynlegar eru fyrir LTO hagræðingu hefur verið breytt. Slíkar skrár eru nú alltaf vistaðar í núverandi möppu nema slóðinni sé sérstaklega breytt með "-dumpbase", "-dumpdir" og "-save-temps=*" valkostinum.
  • Stuðningur við tvöfalda sniðið BRIG til notkunar með HSAIL (Heterogeneous System Architecture Intermediate Language) tungumálinu hefur verið úrelt og verður brátt fjarlægt.
  • Möguleiki ThreadSanitizer hamsins (-fsanitize=thread) hefur verið aukin, hannaður til að greina keppnisaðstæður þegar sömu gögnum er deilt frá mismunandi þráðum fjölþráða forrits. Nýja útgáfan bætir við stuðningi við aðra keyrslutíma og umhverfi, sem og stuðning við KCSAN (Kernel Concurrency Sanitizer) kembiforritið, hannað til að greina kappakstursaðstæður á kraftmikinn hátt innan Linux kjarnans. Bætt við nýjum valkostum „-param tsan-distinguish-rostig“ og „-param tsan-instrument-func-entry-exit“.
  • Dálkanúmer í greiningarskilaboðum endurspegla nú ekki bætafjöldann frá upphafi línunnar, heldur í raun dálkanúmerin sem taka tillit til margra bæta stafi og stafi sem eru í nokkrum stöðum í línunni (til dæmis tekur stafurinn 🙂 tvær stöður og er kóðuð í 4 bætum). Sömuleiðis er nú farið með flipastafi sem ákveðinn fjölda bila (stillanlegt með -ftabstop valkostinum, sjálfgefið 8). Til að endurheimta gamla hegðun er valmöguleikinn „-fdiagnostics-column-unit=byte“ lagður til og til að ákvarða upphafsgildið (talað frá 0 eða 1) - „-fdiagnostics-column-origin=“ valmöguleikinn.
  • Vektorarinn tekur tillit til alls innihalds aðgerðarinnar og bætir við vinnslumöguleikum sem tengjast gatnamótum og tilvísunum í fyrri blokkir í stjórnflæðisgrafinu (CFG, stjórnflæðisgraf).
  • Fínstillingin útfærir getu til að umbreyta röð af skilyrtum aðgerðum sem bera saman sömu breytu í rofatjáningu. Hægt er að kóða rofatjáninguna síðar með því að nota bitaprófunarleiðbeiningar („-fbit-tests“ valmöguleikinn hefur verið bætt við til að stjórna slíkri umbreytingu).
  • Bætt hagræðingu á milli verklagsreglna. Bætti við nýjum IPA-modref passa (-fipa-modref) til að fylgjast með aukaverkunum þegar hringt er í aðgerðir og bæta nákvæmni greiningarinnar. Bætt útfærsla á IPA-ICF passanum (-fipa-icf), sem dregur úr minnisnotkun við söfnun og eykur fjölda sameinaðra aðgerða sem sams konar kóðablokkir eru sameinaðir fyrir. Í IPA-CP (Interprocedural constant propagation) passanum hefur spáheuristics verið bætt, að teknu tilliti til þekktra marka og eiginleika lykkjanna.
  • Í Linking Time Optimizations (LTO) er bækakóðasniðið fínstillt til að minnka stærð og bæta vinnsluhraða. Minnkuð hámarksminnisnotkun meðan á bindingu stendur.
  • Í hagræðingarkerfi sem byggir á niðurstöðum kóðasniðs (PGO - Profile-guided optimization), sem gerir kleift að búa til ákjósanlegri kóða byggt á greiningu á framkvæmdareiginleikum, minnkar stærð skráa með GCOV gögnum vegna fyrirferðarmeiri umbúða með núllteljara . Bætt „-fprofile-values“ ham með því að fylgjast með fleiri breytum á óbeinum símtölum.
  • Innleiðing OpenMP 5.0 (Open Multi-Processing) staðalsins, sem skilgreinir API og aðferðir til að beita samhliða forritunaraðferðum á fjölkjarna og blendingskerfi (CPU+GPU/DSP) með sameiginlegu minni og vektoriseringareiningum (SIMD), hefur hélt áfram. Bætti við upphafsstuðningi við úthlutunartilskipunina og getu til að nota ólíkar lykkjur í OpenMP smíðum. Innleiddur stuðningur fyrir OMP_TARGET_OFFLOAD umhverfisbreytuna.
  • Útfærsla OpenACC 2.6 samhliða forritunarforskriftarinnar sem kveðið er á um fyrir C, C++ og Fortran tungumál hefur verið endurbætt, sem skilgreinir verkfæri til að hlaða niður aðgerðum á GPU og sérhæfðum örgjörvum, eins og NVIDIA PTX.
  • Fyrir C tungumál hefur nýr eiginleiki "no_stack_protector" verið innleiddur, hannaður til að merkja aðgerðir sem ekki ætti að virkja staflavörn fyrir ("-fstack-protector"). „malloc“ eigindin hefur verið stækkuð til að styðja við auðkenningu á pörum af símtölum til að úthluta og losa minni (allocator/deallocator), sem er notað í kyrrstöðugreiningartækinu til að bera kennsl á dæmigerðar villur í vinnu með minni (minnisleki, notkun eftir losun, tvöfalt símtöl í ókeypis aðgerðina o.s.frv.) og í þýðandaviðvörunum “-Wmismatched-dealloc”, “-Wmismatched-new-delete” og “-Wfree-nonheap-object”, sem upplýsir um ósamræmi milli minnisúthlutunar og minnisúthlutunaraðgerða.
  • Nýjum viðvörunum hefur verið bætt við fyrir C tungumálið:
    • "-Wmismatched-dealloc" (virkt sjálfgefið) - varar við minnisúthlutunaraðgerðum sem nota bendi sem er ekki samhæfur minnisúthlutunaraðgerðum.
    • "-Wsizeof-array-div" (virkt þegar "-Wall" er tilgreint) - Varar við því að deila tveimur stærðum á rekstraraðila ef deilirinn passar ekki við stærð fylkisþáttarins.
    • "-Wstringop-overread" (virkt sjálfgefið) - varar við því að kalla á strengjaaðgerð sem les gögn frá svæði utan fylkismörkanna.
    • "-Wtsan" (sjálfgefið virkt) - Varar við notkun eiginleika (eins og std::atomic_thread_fence) sem eru ekki studdir í ThreadSanitizer.
    • „-Warray-parameter“ og „-Wvla-parameter“ (virkt þegar „-Wall“ er tilgreint) - varar við því að hnekkja föllum með ósamrýmanlegum yfirlýsingum um röksemdir sem tengjast fylkjum með fastri og breytilegri lengd.
    • "-Wuninitialized" viðvörunin greinir nú tilraunir til að lesa úr óuppstilltu, virku úthlutað minni.
    • "-Wfree-nonheap-object" viðvörunin stækkar skilgreininguna á tilfellum þar sem minnisúthlutunaraðgerðir eru kallaðar með bendi sem ekki er fengin með kraftmiklum minnisúthlutunaraðgerðum.
    • "-Wmaybe-uninitialized" viðvörunin hefur aukið uppgötvun á vísum sem berast í aðgerðir sem vísa til óforstilltra minnisstaða.
  • Fyrir C tungumálið hefur hluti nýrra eiginleika sem þróaðir eru innan ramma C2X staðalsins verið innleiddir (virkjað með því að tilgreina -std=c2x og -std=gnu2x): fjölva BOOL_MAX og BOOL_WIDTH, valfrjáls vísbending um nöfn ónotaðra færibreyta í virkni skilgreiningar (eins og í C++), eigind „[ [nodiscard]]“, forvinnslurekstraraðili „__has_c_attribute“, fjölva FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559__XNUMX_LT_IEC_XNUMX__XNUMX__ AN, DEC_INFINITY og DEC _NAN, NaN=fjölva fyrir FloatN, _FloatNx og _DecimalN, hæfni til að tilgreina stökkmerki fyrir yfirlýsingar og í lok samsettra yfirlýsinga.
  • Fyrir C++ hefur hluti af þeim breytingum og nýjungum sem lagðar eru til í C++20 staðlinum verið innleiddar, þar á meðal sýndaraðgerðir „consteval virtual“, gervieyðingarefni fyrir lok lífsferils hluta, notkun enum flokks og að reikna út stærð fylkis í „nýju“ tjáningunni.
  • Fyrir C++ hefur tilraunastuðningi verið bætt við fyrir nokkrar endurbætur sem verið er að þróa fyrir C++23 staðal framtíðarinnar (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Til dæmis er nú stuðningur við bókstaflega viðskeytið „zu“ fyrir táknuð stærð_t gildi.
  • libstdc++ hefur bætt stuðning við C++17 staðalinn, þar á meðal kynningu á std::from_chars og std::to_chars útfærslum fyrir flotpunktagerðir. Innleiddi nýja þætti C++20 staðalsins, þar á meðal std::bit_cast, std::source_location, atómaðgerðir bíða og tilkynna, , , , , sem og þættir í framtíðar C++ staðall 23 (std::to_underlying, std::is_scoped_enum). Bætt við tilraunastuðningi fyrir gerðir fyrir samhliða gagnavinnslu (SIMD, Data-Parallel Types). Innleiðingu std::uniform_int_distribution hefur verið flýtt.
  • Fjarlægði alfa gæðafánann úr libgccjit, sameiginlegu bókasafni til að fella kóðarafall inn í önnur ferli og nota hann til að skipuleggja JIT samantekt bækakóða í vélkóða. Bætti við getu til að byggja libgccjit fyrir MinGW.
  • Bætti við stuðningi við AArch64 Armv8-R arkitektúr (-march=armv8-r). Fyrir AArch64 og ARM arkitektúr hefur stuðningi við örgjörva verið bætt við (færibreytur -mcpu og -mtune): Arm Cortex-A78 (cortex-a78), Arm Cortex-A78AE (cortex-a78ae), Arm Cortex-A78C (cortex-a78c) , Arm Cortex- X1 (berki-x1), Arm Neoverse V1 (neoverse-v1) og Arm Neoverse N2 (neoverse-n2). Fujitsu A64FX (a64fx) og Arm Cortex-R82 (cortex-r82) örgjörvum hefur einnig verið bætt við, sem styðja aðeins AArch64 arkitektúrinn.
  • Bætti við stuðningi við að nota Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) og MVE (AArch32 M-snið) SIMD leiðbeiningar til að sjálfvirka vectorize aðgerðir sem framkvæma samlagningu, frádrátt, margföldun og afbrigði samlagningar/frádráttar yfir flóknar tölur. Bætti við upphafsstuðningi fyrir sjálfvirka vektorvæðingu fyrir ARM með því að nota MVE leiðbeiningasettið.
  • Fyrir ARM palla er fullt sett af þýðanda samþættum C aðgerðum (Intrinsics) til staðar, skipt út fyrir útbreiddar vektorleiðbeiningar (SIMD), sem ná yfir allar NEON leiðbeiningar sem eru skjalfestar í ACLE Q3 2020 forskriftinni.
  • Stuðningur við gfx908 GPU hefur verið bætt við bakendann til að búa til kóða fyrir AMD GPU byggt á GCN örarkitektúrnum.
  • Bætti við stuðningi við nýja örgjörva og nýjar viðbætur við kennslusett sem innleiddar eru í þeim:
    • Intel Sapphire Rapids (-march=sapphirerapids, gerir kleift að styðja við MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, AMX-FVNIMX-X.X.
    • Intel Alderlake (-march=alderlake, gerir stuðning fyrir CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI og HRESET leiðbeiningar).
    • Intel Rocketlake (-march=rocketlake, svipað og Rocket Lake án SGX stuðning).
    • AMD Zen 3 (-mars=znver3).
  • Fyrir IA-32/x86-64 kerfi byggð á Intel örgjörvum hefur stuðningi við nýjar örgjörvaleiðbeiningar TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI verið bætt við.
  • Bætti við stuðningi við "-march=x86-64-v[234]" fána til að velja x86-64 byggingarlistarstig (v2 - nær yfir SSE4.2, SSSE3, POPCNT og CMPXCHG16B viðbætur; v3 - AVX2 og MOVBE; v4 - AVX-512 ).
  • Bætti við stuðningi við RISC-V kerfi með big-endian bæta röð. Bætt við "-misa-spec=*" valmöguleika til að velja útgáfu RISC-V leiðbeiningasetts arkitektúrforskriftarinnar. Bætti við stuðningi við AddressSanitizer og staflavörn með því að nota kanarímerki.
  • Áframhaldandi endurbætur á „-fanalyzer“ kyrrstöðugreiningarhamnum, sem framkvæmir auðlindafreka aðferðagreiningu á keyrsluslóðum kóða og gagnaflæði í forritinu. 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. Í nýju útgáfunni:
    • Kóðinn til að rekja stöðu forritsins hefur verið endurskrifaður að fullu. Vandamál við að skanna mjög stórar C skrár hafa verið leyst.
    • Bætti við upphaflegum C++ stuðningi.
    • Minnisúthlutun og úthlutunargreining hefur verið tekin úr sérstökum malloc og ókeypis aðgerðum og styður nú nýtt/eyða og nýtt[]/eyða[].
    • Bætt við nýjum viðvörunum: -Wanalyzer-shift-count-neikvætt, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const og -Wanalyzer-write-to-string-literal.
    • Bætt við nýjum villuleitarvalkostum -fdump-analyzer-json og -fno-analyzer-feasibility.
    • Möguleikinn á að framlengja greiningartækið í gegnum viðbætur fyrir GCC hefur verið innleiddur (til dæmis hefur viðbót verið útbúin til að athuga ranga notkun á alþjóðlegum læsingum (GIL) í CPython).

Heimild: opennet.ru

Bæta við athugasemd