Release av GCC 10-kompilatorsviten

Efter ett Är av utveckling publicerad lansering av en gratis uppsÀttning kompilatorer GCC 10.1, den första större utgÄvan i den nya GCC 10.x-grenen. Enligt nytt system UtgÄvenummerering, version 10.0 anvÀndes under utvecklingen, och strax före lanseringen av GCC 10.1 hade en gren av GCC 11.0 redan förgrenats, pÄ basis av vilken nÀsta större utgÄva av GCC 11.1 skulle bildas.

GCC 10.1 Àr kÀnd för sin implementering av mÄnga C++-sprÄkinnovationer som utvecklats för C++20-standarden, förbÀttringar relaterade till den kommande C-sprÄkstandarden (C2x), nya optimeringar i kompilatorns backends och experimentellt stöd. statiskt analyslÀgeDessutom, under förberedelserna av den nya grenen, slutförde projektet överföringen av repositoriet frÄn SVN till Git.

Den huvudsakliga förÀndringar:

  • tillsatt experimentellt statiskt analyslĂ€ge «-fanalysator", som utför resurskrĂ€vande interproceduranalys av kodkörningsvĂ€gar och dataflöden i ett program. LĂ€get kan upptĂ€cka problem i kompileringsstadiet, som dubbelanrop till free()-funktionen för ett minnesomrĂ„de, lĂ€ckor i filbeskrivningar, avreferensering och överföring av nullpekare, Ă„tkomst till frigjorda minnesblock, anvĂ€ndning av oinitierade vĂ€rden etc. AnvĂ€ndningen av det nya lĂ€get för OpenSSL-kod har redan gjort det möjligt att identifiera farlig sĂ„rbarhet.
  • FörbĂ€ttrade interprocedurella optimeringar. IPA-SRA-passet (Interprocedural Scalar Replacement of Shared Values) har omstrukturerats för att köras vid lĂ€nkningstillfĂ€llet och tar bland annat bort oanvĂ€nda vĂ€rden frĂ„n berĂ€knade och returnerade vĂ€rden. Alternativet -finline-functions har aktiverats i optimeringslĂ€get -O2 och har justerats för att gynna kompakt kod framför körtidsprestanda. Heuristiken för avrullning av inline-funktioner har snabbats upp. Heuristiken för avrullning och kloning av inline-funktioner kan nu anvĂ€nda intervallinformation för att förutsĂ€ga effektiviteten hos enskilda konverteringar. För C++ har noggrannheten för typbaserad aliasanalys förbĂ€ttrats.
  • FörbĂ€ttrade lĂ€nkningsfasoptimeringar (LTO). Ny körbar fil har lagts till. LTO-dumpning att dumpa information om objektfiler med LTO-bytekod. I parallella LTO-körningar bestĂ€ms antalet samtidigt körda make-uppgifter nu automatiskt, och om det inte kan bestĂ€mmas anvĂ€nds antalet CPU-kĂ€rnor som en parallelliseringsfaktor. Möjligheten att komprimera LTO-bytekod med hjĂ€lp av zstd-algoritmen har lagts till.
  • FörbĂ€ttrad optimeringsmekanism baserad pĂ„ kodprofileringsresultat (PGO — Profile-guided optimization), som genererar mer optimal kod baserat pĂ„ analys av kodkörningsfunktioner. FörbĂ€ttrat profilstöd under kompilering och separering av "varm"/"kall" kod. Genom alternativet "-fprofile-vĂ€rden» Du kan nu spĂ„ra upp till fyra profilvĂ€rden, till exempel för indirekta samtal och för att ge mer exakt profilinformation.
  • En parallell programmeringsspecifikation har implementerats för C, C++ och Fortran OpenACC 2.6, som definierar metoderna för att avlasta operationer till GPU:er och specialiserade processorer som NVIDIA PTX. Standarden Ă€r nĂ€stan klar. Öppna MP 5.0 (Open Multi-Processing), som definierar API:et och metoderna för att anvĂ€nda parallella programmeringsmetoder pĂ„ flerkĂ€rniga och hybridsystem (CPU+GPU/DSP) med delat minne och vektoriseringsenheter (SIMD). Funktioner som lastprivate villkorsuttryck, scan- och loop-direktiv, order- och use_device_addr-uttryck har lagts till. För OpenMP och OpenACC har stöd för avlastningsoperationer till fjĂ€rde generationens (Fiji) och femte generationens (VEGA 10/VEGA 20) AMD Radeon (GCN) GPU:er lagts till.
  • För sprĂ„k i C-familjen har funktionen "access" lagts till för att beskriva en funktions Ă„tkomst till objekt som skickas via referens eller pekare, och för att associera sĂ„dana objekt med heltalsargument som innehĂ„ller information om objektens storlek. För att fungera tillsammans med "access" har attributet "type" implementerats för att upptĂ€cka felaktig Ă„tkomst frĂ„n anvĂ€ndardefinierade funktioner, till exempel nĂ€r man skriver vĂ€rden till ett omrĂ„de utanför arraygrĂ€nserna. Attributet "symver" har ocksĂ„ lagts till för att associera symboler i en ELF-fil med specifika versionsnummer.
  • Nya varningar tillagda:
    • "-Wstring-compare" (aktiverad med "-Wextra") - varnar för uttryck dĂ€r noll jĂ€mförs med resultatet av anropet av funktionerna strcmp och strncmp, vilket motsvarar en konstant pĂ„ grund av att lĂ€ngden pĂ„ ett argument Ă€r större Ă€n storleken pĂ„ arrayen i det andra argumentet.
    • "-Wzero-length-bounds" (aktiverad med "-Warray-bounds") - Varnar för Ă„tkomst till arrayelement med noll lĂ€ngd, vilket kan leda till att annan data skrivs över.
    • Varningarna "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" och "-Wstringop-overflow" har utökats till att omfatta fler situationer utanför grĂ€nserna som hanteras.
  • Implementerade möjligheten att direkt ange breda tecken i identifierare med hjĂ€lp av den aktuella kodningen (UTF-8 som standard) istĂ€llet för UCN-notation (\uNNNN eller \UNNNNNNNN). Till exempel:

    statisk konstant int π = 3;
    int get_name_pi() {
    returnera π;
    }

  • För C-sprĂ„ket har en del av de nya funktionerna som utvecklats inom C2X-standarden implementerats (aktiverats genom att ange -std=c2x och -std=gnu2x): stöd för syntaxen "[[]]" har dykt upp för att definiera attribut som i C++ (till exempel [[gnu::const]], [[deprecated]], [[fallthrough]] och [[maybe_unused]]. Stöd för syntaxen "u8" har lagts till för att definiera konstanter med UTF-8-tecken.
    Lade till nya makron till Lade till ersÀttningarna "%OB" och "%Ob" i strftime.
  • Som standard anvĂ€nder C lĂ€get "-fno-common", vilket ger mer effektiv Ă„tkomst till globala variabler pĂ„ vissa plattformar.
  • För C++ har cirka 16 förĂ€ndringar och innovationer implementerats, utvecklade i C++20-standarden. Inklusive tillĂ€gget av nyckelordet "constinit"
    och stöd för malltillÀgg har implementerats.begrepp"Begrepp lÄter dig definiera en uppsÀttning krav för mallparametrar som vid kompileringstid begrÀnsar uppsÀttningen argument som kan accepteras som mallparametrar. Begrepp kan anvÀndas för att undvika logiska inkonsekvenser mellan egenskaperna för de datatyper som anvÀnds i en mall och egenskaperna för datatyperna för inparametrarna."
  • G++ detekterar nu odefinierat beteende orsakat av att Ă€ndra konstanta objekt via constexpr. Minskad minnesförbrukning för kompilatorn vid utvĂ€rdering av constexpr. Nya varningar "-Wmismatched-tags" och "-Wredundant-tags" har lagts till.
  • Nya kommandoradsalternativ har föreslagits:
    • "-fallocation-dce" för att ta bort redundanta par av operatorerna "new" och "delete".
    • "-fprofile-partial-training" för att inaktivera storleksoptimeringar för kod som inte har trĂ€nats.
    • -fprofile-reproducible för att kontrollera nivĂ„n av profilreproducerbarhet.
    • "-fprofile-prefix-path" för att definiera baskatalogen för byggnation frĂ„n kĂ€llan som anvĂ€nds vid separat generering av profiler (för "-fprofile-generate=profile_dir" och "-fprofile-use=profile_dir").
  • Varningstexten för de nĂ€mnda alternativen tillhandahĂ„lls med hyperlĂ€nkar som gör det möjligt att hoppa till dokumentation för dessa alternativ. URL-ersĂ€ttning styrs av alternativet "-fdiagnostics-urls".
  • Lade till preprocessoroperatorn "__har_inbyggd", som kan anvĂ€ndas för att kontrollera om det finns inbyggda funktioner.
  • Lade till en ny inbyggd funktion "__builtin_roundeven" med en implementering av avrundningsfunktionen som definieras i ISO/IEC TS 18661-specifikationen, liknande "round", men avrundning uppĂ„t (till ett större vĂ€rde) av den del som Ă€r större Ă€n 0.5, nedĂ„t (till noll) av den del som Ă€r mindre Ă€n 0.5, och baserat pĂ„ pariteten för den nĂ€st sista siffran nĂ€r den Ă€r lika med 0.5.
  • För AArch64-arkitekturen har stöd för SVE2-tillĂ€gget lagts till och stöd för SVE (Scalable Vector Extension) har förbĂ€ttrats, inklusive stöd för inbyggda funktioner och SVE ACLE-typer, och vektorisering har implementerats. Stöd för LSE (Large System Extensions) och TME (Transactional Memory Extension) har utökats. Nya instruktioner som introducerats i Armv8.5-A och Armv8.6-A har lagts till, inklusive instruktioner för generering av slumptal, avrundning, bindning av minnestaggar,
    bfloat16 och matrismultiplikation. Lade till stöd för processorer.
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 och
    Marvell ThunderX3.
  • För ARM32, stöd för FDPIC ABI (64-bitars funktionspekare) lagt till. Omarbetad och optimerad hantering av 64-bitars heltalsoperationer. Stöd för CPU lagt till.
    Arm Cortex-A77,
    Arm Cortex-A76AE och
    Arm Cortex-M35P. Utökat stöd för ACLE-instruktioner för databehandling, inklusive 32-bitars SIMD, 16-bitars multiplikation, min/max-aritmetik och andra DSP-algoritmoptimeringar. Experimentellt stöd för ACLE CDE-instruktioner (Custom Datapath Extension) har lagts till.
  • AvsevĂ€rt förbĂ€ttrad kodgenerering och vektorisering i backend för AMD GPU:er baserade pĂ„ GCN-mikroarkitekturen.
  • Stöd för XMEGA-liknande enheter har lagts till för AVR-arkitekturen.
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, 1608mega1609, ATmega3208, 3209 ATmega4808, ATmega4809, ATmegaXNUMX, ATmegaXNUMX och ATmegaXNUMX.
  • En ny Intel ENQCMD-instruktionsuppsĂ€ttningsarkitekturtillĂ€gg (-menqcmd) har lagts till för IA-32/x86-64-arkitekturer. Stöd har lagts till för Intel Cooperlake-processorer (-march=cooperlake, aktiverar AVX512BF16 ISA-tillĂ€gget) och Tigerlake-processorer (-march=tigerlake, aktiverar MOVDIRI-, MOVDIR64B- och AVX512VP2INTERSECT ISA-tillĂ€ggen).
  • Implementeringen av Heterogeneous System Architecture Intermediate Language (HSAIL) för heterogena datorsystem baserade pĂ„ HSA-arkitekturen har förĂ„ldrats och kommer sannolikt att tas bort i en framtida version.

KĂ€lla: opennet.ru

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster