Pas një viti zhvillimi lëshimi i një grupi kompajlerësh falas , versioni i parë i madh në degën e re të GCC 10.x. Në përputhje me numrat e lëshimit, versioni 10.0 u përdor në procesin e zhvillimit dhe pak para lëshimit të GCC 10.1, dega GCC 11.0 tashmë ishte degëzuar, mbi bazën e së cilës do të formohej versioni tjetër i rëndësishëm, GCC 11.1.
GCC 10.1 është i shquar për zbatimin e shumë inovacioneve në gjuhën C++ të zhvilluara për standardin C++20, përmirësimet që lidhen me standardin e ardhshëm të gjuhës C (C2x), optimizimet e reja në backend-et e kompajlerit dhe mbështetjen eksperimentale. Për më tepër, në përgatitje për degën e re, projekti e migroi depon nga SVN në Git.
Kryesore :
- modaliteti eksperimental i analizës statike "", e cila kryen analiza ndërprocedurale që kërkojnë shumë burime të shtigjeve të ekzekutimit të kodit dhe rrjedhave të të dhënave në një program. Modaliteti është i aftë të zbulojë probleme në kohën e kompajlimit, siç janë thirrjet e dyfishta në funksionin free() për të njëjtën zonë memorieje, rrjedhjet e përshkruesve të skedarëve, çreferencimi dhe kalimi i treguesve null, qasja në blloqe memorieje të liruara, përdorimi i vlerave të painicializuara, etj. Përdorimi i modalitetit të ri për kodin OpenSSL na ka lejuar tashmë të identifikojmë .
- Optimizimet ndërprocedurale janë përmirësuar. Kalimi IPA-SRA (Zëvendësimi Skalar Ndërprocedural i Vlerave të Përbashkëta) është rifaktorizuar për t'u ekzekutuar në kohën e lidhjes dhe, ndër të tjera, tani heq vlerat e llogaritura dhe të kthyera të papërdorura. Opsioni -finline-functions është aktivizuar në modalitetin e optimizimit -O2 dhe është rikonfiguruar për të favorizuar kodin kompakt mbi performancën e kohës së ekzekutimit. Heuristika e zhbërthimit të funksionit në linjë është përshpejtuar. Heuristika e zhbërthimit dhe klonimit të funksionit në linjë tani mund të përdorë informacionin e diapazonit për të parashikuar efektivitetin e konvertimeve individuale. Për C++, saktësia e analizës së pseudonimeve të bazuara në lloj është përmirësuar.
- Optimizime tĂ« pĂ«rmirĂ«suara tĂ« kohĂ«s sĂ« lidhjes (LTO). U shtua njĂ« skedar i ri ekzekutues. PĂ«r tĂ« rivendosur informacionin rreth skedarĂ«ve tĂ« objekteve me kod bajtesh LTO. NĂ« ekzekutimet paralele LTO, numri i detyrave tĂ« krijimit qĂ« ekzekutohen njĂ«kohĂ«sisht tani zbulohet automatikisht dhe, nĂ«se kjo nuk mund tĂ« pĂ«rcaktohet, numri i bĂ«rthamave tĂ« CPU-sĂ« pĂ«rdoret si faktor paralelizimi. ĂshtĂ« shtuar kompresimi i kodit bajtesh LTO duke pĂ«rdorur algoritmin zstd.
- Mekanizmi i Optimizimit të Udhëzuar nga Profili (PGO) është përmirësuar. Ai gjeneron kod më optimal bazuar në një analizë të karakteristikave të ekzekutimit të kodit. Gjurmimi i profilit gjatë përpilimit dhe ndarja e kodit të nxehtë/të ftohtë janë përmirësuar. Nëpërmjet "» Tani mund të gjurmoni deri në 4 vlera profili, për shembull për thirrje indirekte dhe për të ofruar informacion më të saktë të profilit.
- Një specifikim programimi paralel është zbatuar për C, C++ dhe Fortran. , i cili përcakton mjetet për transferimin e operacioneve te GPU-të dhe procesorët e specializuar si NVIDIA PTX. Standardi është pothuajse i përfunduar. (Open Multi-Processing), i cili përcakton API-në dhe metodat për zbatimin e teknikave të programimit paralel në sisteme shumëbërthamëshe dhe hibride (CPU+GPU/DSP) me memorie të përbashkët dhe njësi vektorizimi (SIMD). Janë shtuar veçori të tilla si kushtëzimi lastprivate, direktivat e skanimit dhe të loop-it, shprehjet order dhe use_device_addr. Mbështetja e shkarkimit për OpenMP dhe OpenACC është shtuar në GPU-të AMD Radeon (GCN) të gjeneratës së katërt (Fiji) dhe të gjeneratës së pestë (VEGA 10/VEGA 20).
- Për gjuhët e familjes C, funksioni "access" është shtuar për të përshkruar aksesin e funksionit në objektet e kaluara me referencë ose tregues, dhe për të shoqëruar objekte të tilla me argumente të numrave të plotë që përmbajnë informacion mbi madhësinë e objektit. Atributi "type" është zbatuar për të punuar së bashku me "access" për të zbuluar aksesin e pavlefshëm nga funksionet e përcaktuara nga përdoruesi, siç është kur shkruhen vlera në një zonë jashtë kufijve të një vargu. Atributi "symver" është shtuar gjithashtu për të shoqëruar simbolet në një skedar ELF me numra specifikë versioni.
- Paralajmërime të reja të shtuara:
- "-Wstring-compare" (aktivizuar me "-Wextra") - Paralajmëron për shprehjet në të cilat zero krahasohet me rezultatin e thirrjes së funksioneve strcmp dhe strncmp, që është ekuivalente me një konstante për shkak se gjatësia e një argumenti është më e madhe se madhësia e vargut në argumentin e dytë.
- "-Wzero-length-bounds" (aktivizuar me "-Warray-bounds") - Paralajmëron për aksesimin e elementëve të vargut me gjatësi zero, gjë që mund të çojë në mbishkrimin e të dhënave të tjera.
- Paralajmërimet "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" dhe "-Wstringop-overflow" janë zgjeruar për të përfshirë një gamë më të gjerë situatash jashtë kufijve.
- Mundësia për të specifikuar drejtpërdrejt karaktere të gjera në identifikues është zbatuar, duke përdorur kodimin aktual (UTF-8 si parazgjedhje) në vend të simbolit UCN (\uNNNN ose \UNNNNNNNNN). Për shembull:
statike const int Ï = 3;
int get_naĂŻve_pi() {
kthe Ï;
} - NjĂ« numĂ«r veçorish tĂ« reja tĂ« zhvilluara brenda standardit C2X janĂ« zbatuar pĂ«r gjuhĂ«n C (tĂ« aktivizuara duke specifikuar -std=c2x dhe -std=gnu2x): Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r sintaksĂ«n "[[]]" pĂ«r pĂ«rcaktimin e atributeve si nĂ« C++ (pĂ«r shembull, [[gnu::const]], [[deprecated]], [[fallthrough]] dhe [[maybe_unused]]. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r sintaksĂ«n "u8" pĂ«r pĂ«rcaktimin e konstanteve me karaktere UTF-8.
Makro të reja janë shtuar në Zëvendësimet "%OB" dhe "%Ob" janë shtuar në strftime. - Modaliteti i parazgjedhur për C është "-fno-common", i cili lejon qasje më efikase në variablat globale në disa platforma.
- C++ ka zbatuar afërsisht 16 ndryshime dhe inovacione, të zhvilluara në standardin C++20. Këto përfshijnë shtimin e fjalës kyçe "constinit".
dhe është zbatuar mbështetje për zgjerimet e shablloneve.Konceptet ju lejojnë të përcaktoni një sërë kërkesash për parametrat e shabllonit që, në kohën e kompajlimit, kufizojnë sërën e argumenteve që mund të pranohen si parametra të shabllonit. Konceptet mund të përdoren për të shmangur mospërputhjet logjike midis vetive të llojeve të të dhënave të përdorura brenda një shablloni dhe vetive të llojeve të të dhënave të parametrave të hyrjes. - G++ tani zbulon sjellje të padefinuara të shkaktuara nga modifikimi i objekteve konstante nëpërmjet constexpr. Konsumi i memories së kompiluesit gjatë vlerësimit të constexpr është zvogëluar. Janë shtuar paralajmërime të reja, "-Wmismatched-tags" dhe "-Wredundant-tags".
- Janë propozuar opsione të reja të linjës së komandës:
- "-fallocation-dce" për të hequr çiftet e tepërta të operatorëve "i ri" dhe "fshij".
- "-fprofile-partial-training" për të çaktivizuar optimizimet e madhësisë për kodin që nuk i është nënshtruar një ekzekutimi trajnimi.
- -fprofile-i riprodhueshëm për të kontrolluar nivelin e riprodhueshmërisë së profilit.
- "-fprofile-prefix-path" për të përcaktuar direktorinë bazë të ndërtimit nga burimi i përdorur për gjenerimin e profileve të veçanta (për "-fprofile-generate=profile_dir" dhe "-fprofile-use=profile_dir").
- Teksti paralajmërues për opsionet e përmendura tani shfaq hiperlidhje që çojnë në dokumentacionin për këto opsione. Zëvendësimi i URL-së kontrollohet nga opsioni "-fdiagnostics-urls".
- Operatori i parapërpunuesit u shtua "", i cili mund të përdoret për të kontrolluar praninë e funksioneve të integruara.
- U shtua një funksion i ri i integruar "__builtin_roundeven" me një implementim të funksionit të rrumbullakosjes të përcaktuar në specifikimin ISO/IEC TS 18661, i ngjashëm me "round", por duke rrumbullakosur lart (në një vlerë më të madhe) çdo pjesë më të madhe se 0.5, poshtë (në zero) çdo pjesë më të vogël se 0.5, dhe bazuar në paritetin e shifrës së parafundit çdo pjesë të barabartë me 0.5.
- PĂ«r arkitekturĂ«n AArch64, Ă«shtĂ« shtuar mbĂ«shtetja pĂ«r zgjerimin SVE2 dhe Ă«shtĂ« pĂ«rmirĂ«suar mbĂ«shtetja pĂ«r SVE (Scalable Vector Extension), duke pĂ«rfshirĂ« mbĂ«shtetjen pĂ«r funksionet e integruara dhe llojet SVE ACLE, si dhe mbĂ«shtetjen pĂ«r vektorizimin. ĂshtĂ« zgjeruar mbĂ«shtetja pĂ«r LSE (Large System Extensions) dhe TME (Transactional Memory Extension). JanĂ« shtuar udhĂ«zime tĂ« reja tĂ« prezantuara nĂ« Armv8.5-A dhe Armv8.6-A, duke pĂ«rfshirĂ« udhĂ«zime pĂ«r gjenerimin e numrave tĂ« rastĂ«sishĂ«m, rrumbullakosjen dhe lidhjen e etiketave tĂ« memories.
bfloat16 dhe shumëzimi i matricave. Mbështetje e shtuar për CPU-në.
Krahu Cortex-A77,
Krahu Cortex-A76AE,
Krahu Cortex-A65,
Krahu Cortex-A65AE,
Krahu Cortex-A34 dhe
Marvell ThunderX3. - MbĂ«shtetja FDPIC ABI (treguesa funksionesh 64-bit) Ă«shtĂ« shtuar pĂ«r ARM32. Trajtimi i operacioneve tĂ« numrave tĂ« plotĂ« 64-bit Ă«shtĂ« ripunuar dhe optimizuar. ĂshtĂ« shtuar mbĂ«shtetja pĂ«r CPU-nĂ«.
Krahu Cortex-A77,
Krahu Cortex-A76AE dhe
Arm Cortex-M35P. MbĂ«shtetje e zgjeruar pĂ«r udhĂ«zimet e pĂ«rpunimit tĂ« tĂ« dhĂ«nave ACLE, duke pĂ«rfshirĂ« SIMD 32-bit, shumĂ«zimin 16-bit, aritmetikĂ«n min/max dhe optimizime tĂ« tjera tĂ« algoritmeve DSP. ĂshtĂ« shtuar mbĂ«shtetje eksperimentale pĂ«r udhĂ«zimet ACLE CDE (Custom Datapath Extension). - Gjenerimi i kodit dhe vektorizimi nĂ« backend janĂ« pĂ«rmirĂ«suar ndjeshĂ«m pĂ«r GPU-tĂ« AMD bazuar nĂ« mikroarkitekturĂ«n GCN.
- Mbështetja për pajisjet e ngjashme me XMEGA është shtuar për arkitekturën AVR.
ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608 ATmega1609, ATmega3208, ATmega3209, ATmega4808 dhe ATmega4809. - NjĂ« zgjerim i ri i arkitekturĂ«s sĂ« setit tĂ« udhĂ«zimeve tĂ« Intel, ENQCMD (-menqcmd), Ă«shtĂ« shtuar pĂ«r arkitekturat IA-32/x86-64. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r CPU-tĂ« Intel Cooperlake (-march=cooperlake, aktivizon zgjerimin AVX512BF16 ISA) dhe Tigerlake (-march=tigerlake, aktivizon zgjerimet MOVDIRI, MOVDIR64B dhe AVX512VP2INTERSECT ISA).
- Implementimi i Gjuhës së Ndërmjetme të Arkitekturës së Sistemit Heterogjen (HSAIL) për sisteme llogaritëse heterogjene bazuar në arkitekturën HSA është vjetëruar dhe ka të ngjarë të hiqet në një version të ardhshëm.
Burimi: opennet.ru
