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

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

GCC 9.1 er áberandi fyrir að koma stöðugleika á stuðning við C++17 staðalinn, halda áfram að innleiða möguleika framtíðar C++20 staðalsins (kóðanafn C++2a), innlimun í framenda fyrir D tungumálið, stuðningur að hluta fyrir OpenMP 5.0 , næstum fullkominn stuðningur fyrir OpenACC 2.5, auka sveigjanleika hagræðingar og hagræðingar á milli aðferða á bindingarstigi, stækkun greiningartækja og viðbót við nýjar viðvaranir, bakenda fyrir OpenRISC, C-SKY V2 og AMD GCN GPU.

Helstu breytingar:

  • Bætt við stuðningi við D forritunarmálið. GCC inniheldur framenda með þýðanda GDC (Gnu D þýðanda) og keyrslusöfn (libphobos), sem gera þér kleift að nota staðlaða GCC til að smíða forrit á D forritunarmálinu. Ferlið við að virkja D tungumálastuðning í GCC hefur byrjað aftur árið 2011, en dróst áfram vegna nauðsyn þess að koma kóðanum í samræmi við kröfur GCC og vandamála við flutning hugverkaréttinda til Digital Mars, sem er að þróa D forritunarmálið;
  • Endurbætur hafa verið gerðar á kóðarafallinu. Til dæmis hefur verið innleitt notkun mismunandi aðferða til að stækka Switch tjáning (stökktöflu, bitapróf, ákvörðunartré) eftir aðstæðum. Bætti við möguleikanum á að umbreyta línulegum föllum sem innihalda Switch tjáningu með því að nota „-ftree-switch-conversion“ fínstillinguna (til dæmis mengi skilyrða eins og „tilvik 2: hvernig = 205; brot; tilvik 3: hvernig = 305; brot ;” verður breytt í "100 * hvernig + 5";
  • Bætt hagræðingu á milli verklagsreglna. Innbyggðar dreifingarstillingar hafa verið aðlagaðar fyrir nútíma C++ kóðagrunna og stækkaðar með nýjum breytum max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-inss og uninlined -hugsunartími. Bætt nákvæmni og árásargirni við aðskilnað kalt/heitt kóða. Bættur sveigjanleiki fyrir mjög stóra þýðingareiningar (til dæmis þegar hagræðing er beitt á tengingarstigi við stór forrit);
  • Hagræðingarkerfi byggt á 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 á eiginleikum kóðaframkvæmdar. Samantektarvalkostur "-fprofile-nota" inniheldur nú fínstillingarstillingarnar "-fversion-lykkjur-fyrir-skref", "-floop-skipti", "-floop-unroll-and-jam" og "-ftree-loop-dreifing". Fjarlægði innifalið súlurita með teljara í skrám, sem minnkaði stærð skráa með sniðum (súlur eru nú búnar til á flugi þegar hagræðingar eru framkvæmdar við tengingu);
  • Enhanced Linking Time Optimizations (LTO). Einföldun gerða var veitt áður en niðurstaðan var mynduð, sem gerði það mögulegt að draga verulega úr stærð LTO-hlutaskráa, draga úr minnisnotkun á bindingarstigi og bæta samhliða starfsemi. Fjöldi skiptinga (-param lto-sneiða) hefur verið aukinn úr 32 í 128, sem bætir afköst á kerfum með miklum fjölda örgjörvaþráða. Færi hefur verið bætt við til að stjórna fjölda fínstillingarferla
    "-param lto-max-streaming-parallelism";

    Þess vegna, samanborið við GCC 8.3, hagræðingarnar sem kynntar voru í GCC 9 leyfilegt minnka samantektartíma Firefox 5 og LibreOffice 66 um um 6.2.3%. Stærð hlutaskrár minnkaði um 7%. Bindunartími á 8 kjarna örgjörva minnkaði um 11%. Raðbundið fínstillingarstig tengistigsins er nú 28% hraðar og eyðir 20% minna minni. Minnisnotkun hvers örgjörva á samhliða stigi LTO minnkaði um 30%;

  • Flest samhliða forritunarforskriftin er útfærð fyrir C, C++ og Fortran tungumál OpenACC 2.5, sem skilgreinir verkfæri til að afhlaða aðgerðum á GPU og sérhæfðum örgjörvum eins og NVIDIA PTX;
  • Stuðningur við staðalinn að hluta hefur verið innleiddur fyrir C og C++ Opnaðu MP 5.0 (Open Multi-Processing), sem skilgreinir API og aðferðir við að beita samhliða forritunaraðferðum fyrir C, C++ og Fortran tungumál á fjölkjarna og blendingum (CPU+GPU/DSP) kerfum með sameiginlegu minni og vektoriseringareiningum (SIMD) ;
  • Nýjum viðvörunum hefur verið bætt við fyrir C tungumálið: "-Vaddress-of-packed-member" (ósamræmt bendigildi á pakkaðan meðlim mannvirkis eða stéttarfélags) og
    «-Wabsolute-gildi" (þegar aðgangur er að föllum til að reikna út algildi, ef það er hentugra fall fyrir tilgreinda röksemdafærslu, til dæmis, ætti að nota fabs(3.14) í stað abs(3.14). Nýjum viðvörunum bætt við fyrir C++: "-Wdeprecated-copy",
    "-Winit-listi-líftími", "-Wredundant-move", "-Wpessimizing-move" og "-Wclass-conversion". Margar áður tiltækar viðvaranir hafa verið rýmkaðar;

  • Bætti við tilraunastuðningi fyrir hluta framtíðar C tungumálastaðalsins, kóðann C2x. Til að virkja C2x stuðning, notaðu valkostina "-std=c2x" og "-std=gnu2x" (til að virkja GNU viðbætur). Staðallinn er enn á frumstigi þróunar, því af getu hans er aðeins tjáningin _Static_assert með einni röksemdafærslu studd (_Static_assert með tveimur rökum er staðlað í C11);
  • Stuðningur við C++17 staðalinn hefur verið lýstur stöðugur. Í framendanum eru tungumálagetu C++17 að fullu útfærð og í libstdc++ eru bókasafnsaðgerðirnar sem skilgreindar eru í staðlinum nálægt fullri útfærslu;
  • Framhald framkvæmd þættir framtíðar C++2a staðalsins. Til dæmis hefur möguleikinn á að innihalda svið meðan á frumstillingu stendur verið bætt við, viðbætur fyrir lambda tjáning hafa verið innleiddar, stuðningur við tóma meðlimi gagnabygginga og líkleg/ólíkleg eigindi hefur verið bætt við, getu til að kalla sýndaraðgerðir í skilyrtum tjáningum hefur verið veitt. , o.s.frv.
    Til að virkja C++2a stuðning, notaðu "-std=c++2a" og "-std=gnu++2a" valkostina. Bætti bita- og útgáfuhausaskrám við libstdc++ fyrir C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible og std::type_identity eiginleikar, std::midpoint, std::lerp fall, std::lerp. , std::bind_front,
    std::visit, std::is_constant_evaluated og std::assume_aligned, bætti við stuðningi við char8_t tegundina, útfærði möguleikann á að athuga forskeyti og viðskeyti strengja (byrjar_með, endar_með);

  • Bætt við stuðningi við nýja ARM örgjörva
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE og Neoverse N1. Bætt við stuðningi við leiðbeiningar sem kynntar eru í Armv8.3-A til að vinna með flóknar tölur, gervi-slembitölugerð (rng) og minnismerkingu (memtag), sem og leiðbeiningar um að hindra árásir sem tengjast íhugandi framkvæmd og rekstri útibússpáeiningarinnar . Fyrir AArch64 arkitektúrinn hefur verndarstillingu verið bætt við gatnamót stafla og hrúgu ("-fstack-clash-protection"). Til að nota eiginleika Armv8.5-A arkitektúrsins hefur valkostinum „-march=armv8.5-a“ verið bætt við

  • Það inniheldur stuðning til að búa til kóða fyrir AMD GPU sem byggir á GCN örarkitektúrnum. Útfærslan er eins og er takmörkuð við samantekt á einþráðum forritum (stuðningur við að framkvæma fjölþráða útreikninga í gegnum OpenMP og OpenACC verður í boði síðar) og stuðning fyrir GPU Fiji og Vega 10;
  • Bætt við nýjum bakenda fyrir örgjörva OpenRISC;
  • Bætt við bakenda fyrir örgjörva C-SKY V2, framleitt af kínverska fyrirtækinu með sama nafni fyrir ýmis neytendatæki;
  • Allir skipanalínuvalkostir sem nota bætigildi styðja viðskeytin kb, KiB, MB, MiB, GB og GiB;
  • Framkvæmt „-flive-patching=[inline-only-static|inline-clone]“ valmöguleikinn gerir þér kleift að ná öruggri samantekt fyrir lifandi plástrakerfi vegna fjölþrepa stjórnunar á notkun á interferla (IPA) hagræðingar;
  • Bætt við "--completion" valmöguleika fyrir fínkorna stjórn á valkostum þegar bash er notað;
  • Greiningarverkfærin bjóða upp á frumtextaútdrátt sem gefur til kynna línunúmerið og merkja tengdar upplýsingar sjónrænt, svo sem operandagerðir. Til að slökkva á birtingu línunúmera og merkimiða eru valkostirnir „-fno-diagnostics-show-line-numbers“ og „-fno-diagnostics-show-labels“ til staðar;

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

  • Útvíkkað verkfæri til að greina villur í C++ kóða, aukinn læsileika upplýsinga um orsakir villna og auðkenningu á erfiðum breytum;

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

  • Bætt við valmöguleika „-fdiagnostics-format=json“, sem gerir kleift að búa til greiningarúttak á véllesanlegu sniði (JSON);
  • Bætt við nýjum sniðmöguleikum „-fprofile-filter-files“ og „-fprofile-exclude-files“ til að velja upprunaskrár sem á að vinna úr;
  • AddressSanitizer býður upp á þéttari sannprófunarkóða fyrir sjálfvirkar breytur, sem dregur úr minnisnotkun á keyrsluskránni sem verið er að athuga;
  • Bætt framleiðsla í "-fopt-upplýsingar» (nákvæmar upplýsingar um bættar hagræðingar). Bætt við nýjum forskeytum „optimized“ og „missed“, til viðbótar við áður tiltæka forskeyti „ath.“. Bætt framleiðsla upplýsinga um ákvarðanatöku um inline-unfolding og vectorization hringrása;
  • Bætti við „-fsave-optimization-record“ valkostinum, þegar tilgreint er, vistar GCC SRCFILE.opt-record.json.gz skrána með lýsingu á ákvörðunum um notkun á tilteknum hagræðingum. Nýi valkosturinn er frábrugðinn „-fopt-info“ hamnum með því að innihalda viðbótar lýsigögn, svo sem upplýsingar um prófílinn og innbyggðar keðjur;
  • Bætt við valmöguleikum "-fipa-stack-alignment" og "-fipa-reference-addressable" til að stjórna röðun stafla og notkun á aðfangastillingum (aðeins skrifa eða lesa-nákvæmt) fyrir truflanir breytur meðan á hagræðingu milli aðferða stendur;
  • Nýjar innbyggðar aðgerðir eru kynntar til að stjórna eigindabindingu sem og hegðun sem tengist greinarspá og framkvæmd íhugandi fyrirmæla: "__innbyggður_hefur_eiginleika«,«__innbyggður_búast_með_líkum"Og"__innbyggður_hugmynda_öruggt_gildi". Nýr eiginleiki hefur verið bætt við fyrir aðgerðir, breytur og tegundir afrita;
  • Fullur stuðningur við ósamstillt inntak/úttak hefur verið innleitt fyrir Fortran tungumálið;
  • Stuðningur við Solaris 10 (*-*-solaris2.10) og Cell/BE (Cell Broadband Engine SPU) palla hefur verið úreltur og verður fjarlægður í næstu stóru útgáfu. Stuðningur við Armv2, Armv3, Armv5 og Armv5E arkitektúr hefur verið hætt. Stuðningur við Intel MPX (Memory Protection Extensions) hefur verið hætt.

Heimild: opennet.ru

Bæta við athugasemd