No engem Joer vun der Entwécklung ass déi gratis GCC 11.1 Compiler Suite verëffentlecht ginn, déi éischt bedeitend Verëffentlechung an der neier GCC 11.x Branche. Am Aklang mat der neier Verëffentlechungsnummeréierungsschema gouf d'Versioun 11.0 am Entwécklungsprozess benotzt, a kuerz virun der Verëffentlechung vum GCC 11.1 war d'GCC 12.0 Filial scho ofgeschnidden, op Basis vun dÀr déi nÀchst grouss Verëffentlechung, GCC 12.1, géif geformt ginn.
GCC 11.1 ass bemierkenswĂ€ert fir sĂ€in Iwwergank zum Gebrauch vum DWARF 5 Debug Dateiformat par dĂ©faut, d'Standard Inklusioun vum C ++17 Standard ("-std = gnu ++17"), bedeitend Verbesserungen an der ĂnnerstĂ«tzung fir den C ++20 Standard, experimentell ĂnnerstĂ«tzung fir C ++ 23, Verbesserungen am Zesummenhang mat der Zukunft C Sprooch Norm (C2x), nei Leeschtung optimizations.
Main Ănnerungen:
- De Standardmodus fir d'C++ Sprooch gouf ëmgewandelt fir den C++17 Standard (-std=gnu++17) ze benotzen amplaz vum virdru ugebueden C++14. Et ass méiglech dat neit C++17 Verhalen selektiv auszeschalten wann Dir Templates veraarbecht déi aner Templates als Parameter benotzen (-fno-new-ttp-matching).
- ĂnnerstĂ«tzung fir d'Hardwarebeschleunigung vum AddressSanitizer Tool gouf bĂ€igefĂŒĂŒgt, deen Zougang zu frĂ€igeloossene SpeicherberĂ€icher, Buffer-Iwwerlaf an aner Speicherfehler erkennt. Hardwarebeschleunigung ass de Moment nĂ«mme fir d'AArch64 Architektur verfĂŒgbar a konzentrĂ©iert sech op d'Kernelkompilatioun. LinuxFir d'Hardwarebeschleunigung fir AddressSanitizer z'ermĂ©iglechen, gouf de FĂ€ndel "-fsanitize=hwaddress" beim Opbau vu Benotzerraumkomponenten an de FĂ€ndel "-fsanitize=kernel-hwaddress" fir de Kernel bĂ€igefĂŒĂŒgt.
- Wann Dir Debugging Informatioun generĂ©iert, gĂ«tt den DWARF 5 Format Standard benotzt, wat, am Verglach zu frĂ©iere Versiounen, erlaabt 25% mĂ©i kompakt Debugging Daten ze generĂ©ieren. Voll ĂnnerstĂ«tzung fir DWARF 5 erfuerdert op d'mannst Binutils Versioun 2.35.2. DWARF 5 Format gĂ«tt an Debugging Tools Ă«nnerstĂ«tzt zĂ«nter GDB 8.0, valgrind 3.17.0, elfutils 0.172 an dwz 0.14. Fir Debug Dateien mat anere Versioune vun DWARF ze generĂ©ieren, kĂ«nnt Dir d'Optiounen "-gdwarf-2", "-gdwarf-3" an "-gdwarf-4" benotzen.
- D'Ufuerderunge fir Compileren déi kënne benotzt gi fir GCC ze bauen sinn erhéicht ginn. De Compiler muss elo den C++11 Standard ënnerstëtzen (virdrun war C++98 erfuerderlech), d.h. Wann GCC 10 genuch war fir GCC 3.4 ze bauen, dann ass op d'mannst GCC 11 elo erfuerderlech fir GCC 4.8 ze bauen.
- Den Numm an d'Plaz vun de Dateien fir Dumps ze spÀicheren, temporÀr Dateien an zousÀtzlech Informatioun déi néideg ass fir d'LTO Optimiséierung goufen geÀnnert. Esou Dateie ginn elo ëmmer am aktuellen Verzeichnis gespÀichert, ausser de Wee gëtt explizit iwwer d'Optiounen "-dumpbase", "-dumpdir" an "-save-temps=*" geÀnnert.
- ĂnnerstĂ«tzung fir de binĂ€re Format BRIG fir d'Benotzung mat der HSAIL (Heterogeneous System Architecture Intermediate Language) Sprooch gouf ofgeschaaft a wĂ€ert geschwĂ«nn ewechgeholl ginn.
- Den ThreadSanitizer-Modus (-fsanitize=thread), deen entwĂ©ckelt gouf fir Rennbedingungen z'entdecken, wa verschidden Threads an enger Multithreaded-Applikatioun glĂ€ichzĂ€iteg op dĂ©iselwecht DonnĂ©eĂ«n zougrĂ€ifen, gouf erweidert. DĂ©i nei Versioun fĂŒĂŒgt ĂnnerstĂ«tzung fir alternativ LafzĂ€iten an Ămfeld bĂ€i, souwĂ©i ĂnnerstĂ«tzung fir den Debugging-Tool KCSAN (Kernel Concurrency Sanitizer), deen entwĂ©ckelt gouf fir Rennbedingungen am Kernel dynamesch z'entdecken. LinuxNei Optiounen "--param tsan-distinguish-volatile" an "--param tsan-instrument-func-entry-exit" goufen derbĂ€igesat.
- Kolonnnummeren an diagnostesche Messagen reflektĂ©ieren elo net d'Bytezuel vum Ufank vun der Linn, awer tatsĂ€chlech d'Kolonnnummeren, dĂ©i Multi-Byte Charaktere berĂŒcksichtegen an Zeechen, dĂ©i verschidde Positiounen an der Linn besetzen (zum Beispill, de Charakter đ besetzt zwou Positiounen an ass a 4 Bytes kodĂ©iert). Och Tab-Zeechen ginn elo als eng gewĂ«ssen Unzuel u Plazen behandelt (konfigurĂ©ierbar iwwer d'-ftabstop Optioun, Standard 8). Fir dat alt Verhalen ze restaurĂ©ieren, gĂ«tt d'Optioun "-fdiagnostics-column-unit=byte" proposĂ©iert, a fir den initialen WĂ€ert ze bestĂ«mmen (Nummer vun 0 oder 1) - d'Optioun "-fdiagnostics-column-origin=".
- De Vectorizer berĂŒcksichtegt de ganzen Inhalt vun der Funktioun a fĂŒĂŒgt d'VeraarbechtungsfĂ€egkeeten un, dĂ©i mat KrĂ€izungen a Referenzen op frĂ©iere Blocken an der Kontrollflossgrafik verbonne sinn (CFG, Kontrollflussgrafik).
- Den Optimizer implementĂ©iert d'FĂ€egkeet fir eng Serie vu bedingte Operatiounen ze konvertĂ©ieren dĂ©i dĂ©iselwecht Variabel an e Schalterausdrock verglĂ€ichen. An Zukunft kann de Schalterausdrock kodĂ©iert ginn mat Bit Testinstruktiounen (d'Optioun "-fbit-Tests" gouf bĂ€igefĂŒĂŒgt fir sou eng Konversioun ze kontrollĂ©ieren).
- Verbesserte interprozedural Optimisatiounen. En neien IPA-modref Pass (-fipa-modref) bĂ€igefĂŒĂŒgt fir Nebenwirkungen ze verfolgen wann Dir Funktiounen urufft an d'Genauegkeet vun der Analyse verbesseren. Verbesserte Implementatioun vum IPA-ICF Pass (-fipa-icf), wat de GedĂ€chtnisverbrauch wĂ€hrend der KompilĂ©ierung reduzĂ©iert an d'Zuel vun vereenegt Funktiounen erhĂ©icht fir dĂ©i identesch Codeblocken kombinĂ©iert ginn. Am IPA-CP (Interprocedural constant propagation) Pass sinn d'Prognoseheuristik verbessert ginn, andeems bekannte Grenzen a Feature vun de Loops berĂŒcksichtegt ginn.
- A Linking Time Optimizations (LTO) ass de Bytecode-Format optimiséiert fir d'Gréisst ze reduzéieren an d'Veraarbechtungsgeschwindegkeet ze verbesseren. Reduzéiert Peak Memory Konsum wÀhrend der Bindungsphase.
- Am Optimiséierungsmechanismus baséiert op de Resultater vun der Codeprofiléierung (PGO - Profil guidéiert Optimiséierung), wat et erlaabt méi optimal Code ze generéieren op Basis vun der Analyse vun Ausféierungsfeatures, gëtt d'Gréisst vun de Dateien mat GCOV Daten reduzéiert wéinst méi kompakt Verpakung vun Nullteller . Verbesserte "-fprofile-values" Modus andeems Dir méi Parameteren op indirekten Uruff verfollegt.
- D'Ămsetze vum OpenMP 5.0 (Open Multi-Processing) Standard, deen d'API a Methoden definĂ©iert fir parallel ProgrammĂ©ierungsmethoden op Multi-Core an Hybrid (CPU + GPU / DSP) Systemer mat gemeinsame GedĂ€chtnis a VektorisĂ©ierungsunitĂ©iten (SIMD) anzesetzen, huet weider. FĂŒĂŒgt initial ĂnnerstĂ«tzung fir d'Allokatiounsdirektiv an d'FĂ€egkeet heterogen Schleifen an OpenMP Konstruktiounen ze benotzen. ImplementĂ©iert ĂnnerstĂ«tzung fir d'OMP_TARGET_OFFLOAD Ămfeld Variabel.
- D'Ămsetzung vun der OpenACC 2.6 Parallel ProgrammĂ©ierungsspezifizĂ©ierung, dĂ©i fir C, C++ a Fortran Sprooche virgesinn ass, gouf verbessert, wat Tools definĂ©iert fir Operatiounen op GPUs a spezialisĂ©iert Prozessoren ze lĂ€schen, wĂ©i NVIDIA PTX.
- Fir C Sproochen ass en neien Attribut "no_stack_protector" ëmgesat ginn, entwéckelt fir Funktiounen ze markéieren fir déi de Stackschutz net ageschalt soll ginn ("-fstack-protector"). D'"malloc" Attribut gouf erweidert fir d'Identifikatioun vu Pairen vun Uriff fir d'Allokatioun an d'Befreiung vun Erënnerung (Allocator / Deallocator) z'ënnerstëtzen, déi am statesche Analysator benotzt gëtt fir typesch Feeler beim Aarbecht mat Erënnerung ze identifizéieren (Erënnerungsleck, Notzung nom Befreiung, duebel Opruff un der frÀi Funktioun, etc.) an am Compiler Warnungen "-Wmismatched-dealloc", "-Wmismatched-nei-lÀschen" an "-Wfree-nonheap-Objet", informéiert iwwer Inkonsistenz tëscht Erënnerung deallocation an Erënnerung Allocatioun Operatiounen.
- Nei Warnunge goufen fir d'C Sprooch bĂ€igefĂŒĂŒgt:
- "-Wmismatched-dealloc" (Standard aktivéiert) - warnt iwwer Erënnerungsdeallokatiounsoperatiounen déi e Pointer benotzen deen net mat Erënnerungsallokatiounsfunktiounen kompatibel ass.
- "-Wsizeof-array-div" (aktivéiert wann "-Wall" spezifizéiert ass) - Warnt iwwer d'Divisioun vun zwou Gréissten vun de Betreiber wann den Divisor net mat der Gréisst vum Arrayelement entsprécht.
- "-Wstringop-overread" (Standard aktivéiert) - warnt iwwer d'Opruff vun enger Stringfunktioun déi Daten aus engem Gebitt ausserhalb vun der Arraygrenz liest.
- "-Wtsan" (Standard aktivéiert) - Warnt iwwer d'Benotzung vu Funktiounen (wéi std::atomic_thread_fence) déi net am ThreadSanitizer ënnerstëtzt ginn.
- "-Warray-Parameter" an "-Wvla-Parameter" (aktivéiert wann Dir "-Wall" spezifizéiert) - warnt iwwer Iwwerschreidendfunktiounen mat inkompatibelen Deklaratioune vun Argumenter, déi mat fixen a variabelen LÀngt Arrays verbonne sinn.
- D'"-Wuninitialized" Warnung erkennt elo Versuche fir aus oninitialiséierter dynamesch zougeloossene Erënnerung ze liesen.
- D'Warnung "-Wfree-nonheap-object" erweidert d'Definitioun vu FÀll, wou Erënnerungsdeallokatiounsfunktiounen genannt ginn mat engem Zeiger net duerch dynamesch Erënnerungsallokatiounsfunktiounen kritt.
- D'Warnung "-Wmaybe-uninitialized" huet d'Erkennung erweidert vu Passende Pointer op Funktiounen déi op oninitialiséiert Erënnerungsplazen bezéien.
- Fir d'C Sprooch ass en Deel vun neie Fonctiounen, déi am Kader vum C2X Standard entwéckelt goufen, implementéiert (aktivéiert andeems Dir -std=c2x an -std=gnu2x spezifizéiert): Makroen BOOL_MAX a BOOL_WIDTH, optional Indikatioun vun den Nimm vun onbenotzten Parameteren an der Funktioun Definitiounen (wéi an C++), Attribut "[ [nodiscard]]", Preprocessoroperateur "__has_c_attribute", Makroen FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559__XNUMX, DBL_IS_IEC_XNUMX, __STDC_WANT_IEC_XNUMX__XNUMX_ SNAN, DEC_INFINITY an D EC_NAN, NaN=Makroen fir FloatN, _FloatNx an _DecimalN, d'FÀegkeet fir Sprangmarken virun Deklaratiounen an um Enn vun zesummegesate Aussoen ze spezifizéieren.
- Fir C++ ass en Deel vun den Ănnerungen an Innovatiounen, dĂ©i am C++20 Standard proposĂ©iert goufen, Ă«mgesat ginn, dorĂ«nner virtuell Funktiounen "consteval virtual", Pseudo-ZerstĂ©ierer fir d'Enn vum Liewenszyklus vun Objeten, d'Benotzung vun der Enum Klass an d'Berechnung vun der GrĂ©isst vun engem Array am "neien" Ausdrock.
- Fir C++ ass experimentell ĂnnerstĂ«tzung bĂ€igefĂŒĂŒgt fir e puer Verbesserunge fir den zukĂŒnftege C++23 Standard entwĂ©ckelt ginn (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Zum Beispill gĂ«tt et elo ĂnnerstĂ«tzung fir de literaresche Suffix "zu" fir Ă«nnerschriwwene size_t WĂ€erter.
- libstdc ++ huet d'ĂnnerstĂ«tzung fir den C ++ 17 Standard verbessert, dorĂ«nner d'AfĂ©ierung vun std :: from_chars an std :: to_chars Implementatioune fir Floating Point Typen. Nei Elementer vum C ++ 20 Standard goufen Ă«mgesat, dorĂ«nner std :: bit_cast, std :: source_location, atomar Operatiounen waart a mellt, , , , , souwĂ©i Elementer vum zukĂŒnftegen C++23 Standard (std::to_underlying, std::is_scoped_enum). ZousĂ€tzlech experimentell ĂnnerstĂ«tzung fir Typen fir parallel Datenveraarbechtung (SIMD, Data-Parallel Types). D'Ămsetzung vun std :: uniform_int_distribution gouf beschleunegt.
- Den Alpha QualitĂ©itsfĂ€ndel vum libgccjit gelĂ€scht, eng gemeinsam BibliothĂ©ik fir e Code Generator an aner Prozesser z'integrĂ©ieren an et ze benotzen fir JIT KompilĂ©ierung vum Bytecode a Maschinncode ze organisĂ©ieren. D'FĂ€egkeet bĂ€igefĂŒĂŒgt fir libgccjit fir MinGW ze bauen.
- ZousĂ€tzlech ĂnnerstĂ«tzung fir d'AArch64 Armv8-R Architektur (-march = armv8-r). Fir AArch64 an ARM Architekturen ass ĂnnerstĂ«tzung fir Prozessoren bĂ€igefĂŒĂŒgt (Parameter -mcpu an -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) an Arm Neoverse N2 (neoverse-n2). Fujitsu A64FX (a64fx) an Arm Cortex-R82 (cortex-r82) CPUs goufen och bĂ€igefĂŒĂŒgt, dĂ©i nĂ«mmen d'AARch64 Architektur Ă«nnerstĂ«tzen.
- ZousĂ€tzlech ĂnnerstĂ«tzung fir d'Benotzung vun Armv8.3-a (AArch64 / AArch32), SVE (AArch64), SVE2 (AArch64) an MVE (AArch32 M-Profil) SIMD Instruktioune fir AutovektorisĂ©ierung vun Operatiounen dĂ©i Zousatz, Subtraktioun, Multiplikatioun a Varianten vun Zousatz / Subtraktioun iwwer maachen komplex Zuelen. Ăischt ĂnnerstĂ«tzung fir AutovektorisĂ©ierung fir ARM bĂ€igefĂŒĂŒgt mam MVE Instruktiounsset.
- Fir ARM Plattformen gĂ«tt e komplette Set vu Compiler-integrĂ©ierten C Funktiounen (Intrinsics) zur VerfĂŒgung gestallt, ersat duerch erweidert Vektorinstruktiounen (SIMD), dĂ©i all NEON Instruktiounen ofdecken, dĂ©i an der ACLE Q3 2020 SpezifizĂ©ierung dokumentĂ©iert sinn.
- ĂnnerstĂ«tzung fir gfx908 GPU gouf op de Backend bĂ€igefĂŒĂŒgt fir Code fir AMD GPUs ze generĂ©ieren basĂ©iert op der GCN Mikroarchitektur.
- ZousĂ€tzlech ĂnnerstĂ«tzung fir nei Prozessoren an nei Instruktiounsset-Extensiounen, dĂ©i an hinnen implementĂ©iert sinn:
- Intel Sapphire Rapids (-march = sapphirerapids, ermĂ©iglecht ĂnnerstĂ«tzung fir d'MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALISE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BVNIMX, AMX-INT16, AMX-BVNIMX.
- Intel Alderlake (-march = alderlake, ermĂ©iglecht ĂnnerstĂ«tzung fir CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI an HRESET Uweisungen).
- Intel Rocketlake (-March = Rocketlake, Ă€hnlech wĂ©i Rocket Lake ouni SGX ĂnnerstĂ«tzung).
- AMD Zen 3 (-march=znver3).
- Fir IA-32 / x86-64 Systemer basĂ©iert op Intel Prozessoren, ĂnnerstĂ«tzung fir nei Prozessor Uweisungen TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI gouf dobĂ€i.
- ZousĂ€tzlech ĂnnerstĂ«tzung fir "-march=x86-64-v[234]" FĂ€ndelen fir x86-64 Architekturniveauen ze wielen (v2 - deckt SSE4.2, SSSE3, POPCNT an CMPXCHG16B Extensiounen; v3 - AVX2 a MOVBE; v4 - AVX-512 ).
- ZousĂ€tzlech ĂnnerstĂ«tzung fir RISC-V Systemer mat Big-endian Byte Uerdnung. D'Optioun "-misa-spec=*" bĂ€igefĂŒĂŒgt fir d'Versioun vun der RISC-V Instruktiounsset Architektur Spezifikatioun ze wielen. ZousĂ€tzlech ĂnnerstĂ«tzung fir AddressSanitizer a Stackschutz mat Kanaresch Tags.
- Weider Verbesserung vum statesche Analysemodus "-fanalyzer", deen Ressourceintensiv interprozedural Analyse vu Code Ausféierungsweeër an Datefloss am Programm mécht. De Modus ass fÀeg fir Probleemer op der Kompiléierungsstadium z'entdecken, sou wéi duebel Uruff un d'gratis () Funktioun fir ee GedÀchtnisberÀich, Dateideskriptor Leckage, dereferencing a Passe Null Pointer, Zougang zu befreit Erënnerungsblocken, benotzt oninitialiséiert WÀerter, etc. An der neier Versioun:
- De Code fir de Programmzoustand ze verfolgen ass komplett nei geschriwwe ginn. Probleemer mam Scannen vu ganz grouss C-Dateien goufen geléist.
- ZousĂ€tzlech initial C ++ ĂnnerstĂ«tzung.
- Memory Allocation an Deallocation Analyse gouf aus de spezifesche malloc a gratis Funktiounen abstrakéiert, an ënnerstëtzt elo nei / lÀschen an nei [] / lÀschen [].
- Nei Warnungen dobÀigesat: -Wanalyzer-Shift-Count-negativ, -Wanalyzer-Shift-Count-Iwwerflow, -Wanalyzer-write-to-const an -Wanalyzer-write-to-string-literal.
- Nei Debugging Optiounen dobÀigesat -fdump-analyzer-json an -fno-analyzer-Machbarkeet.
- D'Kapazitéit fir den Analyser duerch Plugins fir GCC ze verlÀngeren ass ëmgesat ginn (zum Beispill, e Plugin gouf virbereet fir déi falsch Notzung vu Global Locking (GIL) am CPython ze kontrolléieren).
Source: opennet.ru
