GCC 11 kompilatsioonikomplekti vÀljaanne

PĂ€rast aasta kestnud arendust on avaldatud tasuta GCC 11.1 kompilaatorite komplekti versioon, mis on esimene oluline vĂ€ljaanne uutest GCC 11.x harudest. Uue versiooni numbrite sĂŒsteemi kohaselt kasutati versiooni 11.0 arenduse kĂ€igus, ning vahetult enne GCC 11.1 vĂ€ljalaskmist harutati GCC 12.0, mille pĂ”hjal luuakse jĂ€rgmine oluline vĂ€ljaanne GCC 12.1.

GCC 11.1 iseloomustab vaikimisi DWARF 5 vormingu kasutuselevÔtt, C++17 standardi ("-std=gnu++17") vaikimisi aktiveerimine, mÀrkimisvÀÀrsed tÀiustused C++20 standardi toe osas, eksperimentaalsed tÀiustused C++23 toe osas, tulevase C standardi (C2x) toetamisega seotud tÀiustused ning uued jÔudluse optimeerimise vÔimalused.

Peamised muudatused:

  • C++ keele vaikereĆŸiim on vahetatud C++17 standardi (-std=gnu++17) kasutamisele, mitte varasemalt pakutud C++14-le. Uue C++17 kĂ€itumise valikulise keelamise vĂ”imalus on olemas, kui mallides kasutatakse teisi malle (-fno-new-ttp-matching).
  • Lisatud on riistvarakaitsete toetamine AddressSanitizer'i tööriistale, mis vĂ”imaldab tuvastada vabastatud mĂ€lualadele juurdepÀÀsude, jaotuse piiridest vĂ€ljapoole minekute ja mĂ”nede muude mĂ€lutöötluse vigade juhtumeid. Riistvarakaitse on seni saadaval ainult AArch64 arhitektuuri jaoks ja on keskendunud Linuxi tuuma kompileerimisele. AddressSanitizer'i riistvarakaitse sisselĂŒlitamiseks kasutamisel kasutage kasutusruumi komponentide ehitamisel lippu „-fsanitize=hwaddress” ja tuumakomponentide jaoks „-fsanitize=kernel-hwaddress”.
  • Vaikimisi on derivate teabe genereerimisel kasutusel DWARF 5 formaat, mis vĂ”rreldes varasemate versioonidega vĂ”imaldab genereerida 25% kompaktsusi derivate andmete hulka. DWARF 5 tĂ€ielikuks toetamiseks on vajalik binutils vĂ€hemalt versioon 2.35.2. Derivate tööriistades toetatakse DWARF 5 alates GDB 8.0, valgrind 3.17.0, elfutils 0.172 ja dwz 0.14. Muude DWARF versioonide kasutamisel derivate failide genereerimisel vĂ”ib kasutada valikuid „-gdwarf-2”, „-gdwarf-3” ja „-gdwarf-4”.
  • TĂ”usnud on nĂ”uded kompilaatoreile, mida saab GCC koostamiseks kasutada. Kompilaator peab nĂŒĂŒd toetama C++11 standardit (varem nĂ”uti C++98), see tĂ€hendab, et kui GCC 10 koostamiseks piisab GCC 3.4 olemasolust, siis GCC 11 koostamiseks on nĂŒĂŒd vajalik vĂ€hemalt GCC 4.8.
  • On muudetud failide nimetusi ja asukohti, et sĂ€ilitada koopiaid, ajutisi faile ja tĂ€iendavat teavet, mis on vajalik LTO-optimeerimise lĂ€biviimiseks. Sellised failid salvestatakse nĂŒĂŒd alati praeguses kataloogis, kui teed ei muudeta selgelt parameetritega „-dumpbase“, „-dumpdir“ ja „-save-temps=*”.
  • BRIG binaarformaadi tugi, mis on ette nĂ€htud HSAIL (Heterogeneous System Architecture Intermediate Language) keele jaoks, on kuulutatud aegunuks ja eemaldatakse peagi.
  • On laiendatud ThreadSanitizer (-fsanitize=thread) reĆŸiimi vĂ”imalused, mis on mĂ”eldud vĂ”istlusolukordade tuvastamiseks, kui erinevad lĂ”ngad pÀÀsevad samadele andmetele. Uues vĂ€ljaandes on lisatud tugi alternatiivsetele runtime'idele ja keskkondadele, samuti on lisatud KCSAN (Kernel Concurrency Sanitizer) silumise tööriista tugi, mis on mĂ”eldud vĂ”istlusolukordade dĂŒnaamiliseks tuvastamiseks Linuxi tuumas. Uued valikud „—param tsan-distinguish-volatile” ja „—param tsan-instrument-func-entry-exit” on lisatud.
  • Diagnostiliste sĂ”numite veergude numbrid kajastavad nĂŒĂŒd mitte baitide arvu rea algusest, vaid tegelikke veergude numbreid, mis arvestavad mitme baitiga sĂŒmboleid ja sĂŒmboleid, mis vĂ”tavad Readis mitu positsiooni (nĂ€iteks sĂŒmbol 🙂 vĂ”tab kaks positsiooni ja kodeeritakse 4 baitiga). Samuti kĂ€sitletakse tabulatsioonisĂŒmboleid nĂŒĂŒd kindla arvu tĂŒhikute jĂ€rgi (seadistatakse valiku -ftabstop kaudu, vaikimisi 8). Vanade kĂ€itumise taastamiseks on pakutud valikut „-fdiagnostics-column-unit=byte”, ja algvÀÀrtuse mÀÀramiseks (numereerimine alates 0 vĂ”i 1) - valik „-fdiagnostics-column-origin=”.
  • Vektoriseerijas on tagatud funktsiooni kogu sisu arvestamine ning lisatud töötlemise vĂ”imalused, mis on seotud lĂ”ikele ja viidetele varasematele plokkidele juhtimisvoo graafikus (CFG, control-flow graph).
  • Optimeerijas on rakendatud vĂ”imalus teisendada tingimusoperatsioonide seeria switch-vĂ€ljendiks, kus vĂ”rreldakse sama muutujat. Edasi vĂ”ib switch-vĂ€ljend olla kodeeritud bititestimiseks mĂ”eldud kĂ€skudega (selle transformatsiooni juhtimiseks lisati valik „-fbit-tests”).
  • Parandatud on vaheprotseduurilisi optimeerimisi. Lisatud on uus IPA-modref kĂ€ik (-fipa-modref), et jĂ€lgida funktsioonide kutsumise kĂ”rvalmĂ”jusid ja suurendada analĂŒĂŒsi tĂ€psust. Parandatud on IPA-ICF (-fipa-icf) kĂ€igu teostus, mille kĂ€igus on vĂ€hendatud mĂ€lu tarbimist kompileerimise ajal ja suurendatud ĂŒhtsete funktsioonide arvu, mille jaoks toimub identsete koodiplokkide ĂŒhendamine. IPA-CP (Interprocedural constant propagation) kĂ€igus on paranenud ennustamise heuristika, arvestades tuntud piire ja tsĂŒklite töö omadusi.
  • Sidumisoptimeerimiste rakendamisel (LTO) on baitkoodiformaat optimeeritud suuruse vĂ€hendamiseks ja töötlemise kiirusetĂ”stmiseks. Sidumise etapis on tipptaset vĂ€hendatud mĂ€lutarbimise osas.
  • Koodi profiilimise alusel optimeerimise mehhanismis (PGO — Profile-guided optimization), mis vĂ”imaldab genereerida paremini optimeeritud koodi, pĂ”hinedes tegevuse iseloomu analĂŒĂŒsile, on GCOV-andmefailide suurust vĂ€hendatud tĂ€nu nullkalkulaatorite kompaktsemale pakkimisele. Parandatud on reĆŸiimi „-fprofile-values” toimimist, tĂ€nu suuremale parameetrite jĂ€lgimisele kaudsete kutsetega.
  • JĂ€tkub OpenMP 5.0 (Open Multi-Processing) standardi rakendamine, mis mÀÀratleb API ja meetodid paralleelse programmeerimise rakendamiseks mitme tuumaga ja hĂŒbriidsetes (CPU+GPU/DSP) sĂŒsteemides koos jagatud mĂ€lu ja vektorimisplokkidega (SIMD). Lisatud on esmane tugi allocate-direktiivile ja vĂ”imalus kasutada ebaĂŒhtlasi tsĂŒkleid OpenMP konstruktsioonides. On rakendatud keskkonna muutuja OMP_TARGET_OFFLOAD toetus.
  • C, C++ ja Fortran'i keelte jaoks on parendatud OpenACC 2.6 paralleelse programmeerimise spetsifikatsioon, mis mÀÀratleb vahendid operatsioonide (offloading) edastamiseks GPU-dele ja spetsialiseeritud protsessoritele, nagu NVIDIA PTX.
  • C keelte peres on sisse viidud uus atribuudi „no_stack_protector“ for, mis tĂ€histab funktsioone, mille puhul ei tohiks aktiveerida stack'i kaitset („-fstack-protector“). Atribuut „malloc“ on laiendatud mĂ€luhaldurite ja vabastajate (allocator/deallocator) kutsete paaride identifitseerimise toega, mis kasutatakse staatilises analĂŒsaatoris, et tuvastada tĂŒĂŒpilisi mĂ€luhalduse vigu (mĂ€lu lekked, kasutamine pĂ€rast vabastamist, funktsiooni free kahekorraline kutsumine jne) ja kaasata kompilaatori hoiatused „-Wmismatched-dealloc“, „-Wmismatched-new-delete“ ja „-Wfree-nonheap-object“, teavitades mĂ€luhaldusoperatsioonide ebajooksust.
  • C keelele on lisatud uusi hoiatusi:
    • „-Wmismatched-dealloc“ (vaikimisi aktiivne) — hoiatab mĂ€lu vabastamise operatsioonide eest, kus kasutatakse nĂ€idikut, mis ei ĂŒhildu mĂ€lu jaotamise funktsioonidega.
    • «-Wsizeof-array-div» (lĂŒlitatakse sisse, kui on mÀÀratud «-Wall») — hoiatab, kui jagatakse kahte sizeof operaatorit, kui jagaja ei vasta massiivi elemendi suurusele.
    • «-Wstringop-overread» (vaikimisi sisse lĂŒlitatud) — hoiatab, kui stringifunktsioon kutsub andmeid lugema massiivi piirest vĂ€ljapoole.
    • «-Wtsan» (vaikimisi sisse lĂŒlitatud) — hoiatab, kui kasutatakse funksioone (nt std::atomic_thread_fence), mida ThreadSanitizer ei toeta.
    • «-Warray-parameter» ja «-Wvla-parameter» (lĂŒlitatakse sisse, kui on mÀÀratud «-Wall») — hoiatab, kui funktsioonide ĂŒlekirjutamine ei ĂŒhti massiivi fikseeritud ja muutliku pikkusega argumentide kuulutustega.
    • Hoiatus «-Wuninitialized» tuvastab nĂŒĂŒd katsed lugeda mitteinitsialiseeritud dĂŒnaamiliselt jaotatud mĂ€lust.
    • Hoiatuses «-Wfree-nonheap-object» on laiendatud mÀÀratlemise ulatust, kui vabastamisfunktsioonide kutsumise puhul kasutatakse mitte dĂŒnaamilise mĂ€lu jaotamise funktsioonide kaudu saadud ponteerijat.
    • Hoiatuses «-Wmaybe-uninitialized» on laiendatud tuvastamine, kui funktsioonidele edastatakse mitteinitsialiseeritud mĂ€lupiirkondadele viitavad ponteerijad.
  • C keele jaoks on ellu viidud uus hulk vĂ”imalusi, mis arendatakse C2X standardi raames (lĂŒlitatakse sisse valikuga -std=c2x ja -std=gnu2x): makrod BOOL_MAX ja BOOL_WIDTH, valikuline mittekasutatud parameetrite nimede mÀÀramine funktsioonide mÀÀratlemisel (nagu C++-s), atribuut „[[nodiscard]]”, eelprotsessor ĐŸĐżĐ”Ń€Đ°tor „__has_c_attribute”, makrod FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559_EXT__, INFINITY, NAN, FLT_SNAN, DBL_SNAN, LDBL_SNAN, DEC_INFINITY ja DEC_NAN, NaN=makrod FloatN, _FloatNx ja _DecimalN, vĂ”imalus mÀÀrata ĂŒlemineku silte enne deklaratsioone ja koostatud operaatorite lĂ”pus.
  • C++ jaoks on ellu viidud hulk muudatusi ja uuendusi, mis on ette pandud C++20 standardis, sealhulgas virtuaalsed funktsioonid „consteval virtual”, vale-destruktorite objektide elutsĂŒkli lĂ”puks, enum klassi kasutamine ja massi suuruse arvutamine „new” vĂ€ljendis.
  • C++-s on lisatud eksperimentaalne tugi mitmete tĂ€ienduste jaoks, mis on arendamisel tulevase C++23 standardi jaoks (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu++2b). NĂ€iteks on lisatud toetus tĂ€histuslisandi „zu” kasutamiseks signaalsete size_t vÀÀrtuste puhul.
  • libstdc++-s on paranenud C++17 standardi tugi, sealhulgas std::from_chars ja std::to_chars rakenduste lisamine ujuvate arvutĂŒĂŒpide jaoks. Uued C++20 standardi elemendid, sealhulgas std::bit_cast, std::source_location, aatomilised operatsioonid wait ja notify, , , , , samuti tulevase C++23 standardi elemendid (std::to_underlying, std::is_scoped_enum) on rakendatud. Eksperimentaalne toetus andmete paralleelse töötlemise (SIMD, andmete paralleeltĂŒĂŒbid) jaoks on lisatud. std::uniform_int_distribution rakendust on kiiremaks muudetud.
  • libgccjit-lt on eemaldatud alfa-kvaliteedi mĂ€rk, mis on jagatud teek, et integreerida koodigeneraator teistesse protsessidesse ja kasutada JIT-kompileerimise korraldamiseks bytekoodist masinkoodiks. Lisatud on vĂ”imalus kompileerida libgccjit MinGW-le.
  • AArch64 Armv8-R (-march=armv8-r) arhitektuuri toetus on lisatud. AArch64 ja ARM arhitektuuride jaoks on lisatud tugiprotsessorid (valikud -mcpu ja -mtune): Arm Cortex-A78 (cortex-a78), Arm Cortex-A78AE (cortex-a78ae), Arm Cortex-A78C (cortex-a78c), Arm Cortex-X1 (cortex-x1), Arm Neoverse V1 (neoverse-v1) ja Arm Neoverse N2 (neoverse-n2). Samuti on lisatud CPU-d Fujitsu A64FX (a64fx) ja Arm Cortex-R82 (cortex-r82), mis toetavad ainult AArch64 arhitektuuri.
  • Lisatud on tugi SIMD-i kĂ€skude kasutamiseks Armv8.3-a (AArch64 / AArch32), SVE (AArch64), SVE2 (AArch64) ja MVE (AArch32 M-profiil) automaatvektoriseerimiseks operatsioonide jaoks, mis teostavad liitmist, lahutamist, korrutamist ja liitmise / lahutamise variante kompleksnumbritega. ARM-i jaoks on lisatud algne tugi automaatvektoriseerimiseks MVE kĂ€skude kogumi abil.
  • ARM-plaatformidele on pakutud tĂ€ielik kogum C funktsioone (Intrinsics), mis on asendatud laiendatud vektori kĂ€skudega (SIMD), hĂ”lmates kĂ”ik NEON-i kĂ€skud, mis on dokumenteeritud ACLE Q3 2020 spetsifikatsioonis.
  • GPU AMD koodigeneraatori tagaplaanile, mis pĂ”hineb GCN mikroarhitektuuril, on lisatud tugi GPU gfx908-le.
  • Lisatud on uute protsessorite ja nende uusimate kĂ€skude kogumi toetamine:
    • Intel Sapphire Rapids (-march=sapphirerapids, sisaldab kĂ€skude tugi MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BF16 ja AVX-VNNI).
    • Intel Alderlake (-march=alderlake, sisaldab kĂ€skude tugi CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI ja HRESET).
    • Intel Rocketlake (-march=rocketlake, Rocket Lake'i analoog ilma SGX toeta).
    • AMD Zen 3 (-march=znver3).
  • Intel'i pĂ”hjal pĂ”hinevatele IA-32/x86-64 sĂŒsteemidele on lisatud tugi uutele protsessori kĂ€sukogudele: TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI.
  • On lisatud toetused lippudele «-march=x86-64-v[234]» arhitektuuri tasemete valimiseks x86-64-s (v2 — katab laiendusi SSE4.2, SSSE3, POPCNT ja CMPXCHG16B; v3 — AVX2 ja MOVBE; v4 — AVX-512).
  • On lisatud RISC-V sĂŒsteemide tugi, mille korral on baitide jĂ€rjekord «big-endian». Lisatud on valik «-misa-spec=*» RISC-V kĂ€sukogude spetsifikatsiooni versiooni valimiseks. Lisatud on AddressSanitizer ja virna kaitse kanarootsade abil.
  • On jĂ€tkatud staatilise analĂŒĂŒsi reĆŸiimi «-fanalyzer» tĂ€iustamist, mis teostab ressursimahukat vaheprotseduuride analĂŒĂŒsi koodi tĂ€itmise radadest ja andmevoogudest programmis. ReĆŸiim suudab kompileerimise etapis tuvastada selliseid probleeme nagu kahekordne free() funktsiooni kutse sama mĂ€luala jaoks, faili descriptorite lekkeid, nullpunktide derreferentsimist ja edastamist, vabastatud mĂ€lublokkidele juurdepÀÀsu, mitte-initsialiseeritud vÀÀrtuste kasutamist jne. Uues versioonis:
    • Kood on tĂ€ielikult ĂŒmber kirjutatud, et jĂ€lgida programmi seisundit. Suured C-failid kontrollimisega seotud probleemid on lahendatud.
    • C++ algtoetuse lisamine.
    • MĂ€lu eraldamise ja vabastamise analĂŒĂŒs on abstraktne spetsiifilistest malloc ja free funktsioonidest ning toetab nĂŒĂŒd new/delete ja new[]/delete[].
    • Uued hoiatusteated: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const ja -Wanalyzer-write-to-string-literal.
    • Uued silumisvalikud -fdump-analyzer-json ja -fno-analyzer-feasibility on lisatud.
    • AnalĂŒsaatori laiendamine GCC pluginatega on rakendatud (nt GMPythonis vale globaalsete lukustuste (GIL) kasutamise kontrollimiseks on plugin ette valmistatud).

Allikas: opennet.ru

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