Verëffentlechung vun der GCC 11 Compiler Suite

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

Kaaft zouverlĂ€sseg Hosting fir Site mat DDoS Schutz, VPS VDS Server đŸ”„ Kaaft zouverlĂ©issegt WebsĂ€ithosting mat DDoS-Schutz, VPS VDS Server | ProHoster