Verëffentlechung vun der GCC 10 Compiler Suite

No engem Joer vun Entwécklung publizéiert Verëffentlechung vun engem gratis Set vu Compilers GCC 10.1, déi éischt grouss Verëffentlechung an der neier GCC 10.x Branche. Am Aklang mat neie Schema Verëffentlechungsnummeren, Versioun 10.0 gouf am Entwécklungsprozess benotzt, a kuerz virun der Verëffentlechung vum GCC 10.1 war d'GCC 11.0 Branche schonn ofgeschnidden, op Basis vun där déi nächst bedeitend Verëffentlechung, GCC 11.1, geformt gëtt.

GCC 10.1 ass bemierkenswäert fir d'Ëmsetzung vu villen Innovatiounen an der C++ Sprooch entwéckelt fir den C++20 Standard, Verbesserungen am Zesummenhang mam zukünftege C Sproochestandard (C2x), nei Optimisatiounen an de Compiler Backends an experimentell Ënnerstëtzung statesch Analyse Modus. Zousätzlech, während der Virbereedung vun enger neier Branche, huet de Projet de Repository vu SVN op Git transferéiert.

Haaptstrooss änneren:

  • Dobäigesat experimentell Modus vun statesch Analyse "-Fanalyzer", déi ressourceintensiv interprozedural Analyse vu Code Ausféierungsweeër an Datefloss an engem 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. D'Benotzung vum neie Modus fir OpenSSL Code huet et scho méiglech gemaach ze identifizéieren geféierlech Schwachstelle.
  • Verbesserte interprozedural Optimisatiounen. Den IPA-SRA (Interprocedural Scalar Shared Replacement) Pass gouf nei designt fir an der Bindzäit ze schaffen an ënner anerem elo berechent a zréckginn onbenotzt Wäerter ewechzehuelen. Am "-O2" Optimiséierungsmodus ass d'Optioun "-finline-functions" aktivéiert, déi zréckgestëmmt gëtt fir méi kompakt Code iwwer d'Ausféierungsleistung ze favoriséieren. D'Aarbecht vun der Heuristik fir Inline Funktioun Deployment gouf beschleunegt. Inline Expansioun a Funktioun Klonen Heuristik kann elo Informatioun iwwer Wäertbereich benotzen fir d'Effektivitéit vun eenzelne Transformatiounen virauszesoen. Fir C ++ ass d'Genauegkeet vum Typ-baséierten Alias ​​Parsing verbessert ginn.
  • Verbesserte Verknëppungszäitoptimisatiounen (LTO). Neien ausführbar bäigefüügt lto-dump fir Informatioun iwwer Objektdateien mat LTO-Bytecode zréckzesetzen. Parallel LTO Passë bestëmmen automatesch d'Zuel vun gläichzäiteg Lafen maachen Aufgaben an, wann se kënnen net bestëmmt ginn, benotzen Informatiounen iwwert d'Zuel vun CPU Kär als parallelization Faktor. D'Fäegkeet bäigefüügt fir LTO-Bytecode mat dem zstd Algorithmus ze kompriméieren.
  • Den Optimiséierungsmechanismus baséiert op de Resultater vun der Codeprofiléierung (PGO - Profil guidéiert Optimiséierung) gouf verbessert, wat méi optimal Code generéiert baséiert op enger Analyse vun de Charakteristiken vun der Code Ausféierung. Verbessert Profil Ënnerhalt während Kompiléierung a waarm / kal Code Trennung. Iwwert d'Optioun "-fprofile-Wäerter» kann elo bis zu 4 Profilwäerter iwwerwaachen, zum Beispill fir indirekt Uruff a méi präzis Profilinformatioun.
  • Parallel Programméierungsspezifizéierung implementéiert fir C, C++ a Fortran Sproochen OpenACC 2.6, deen Tools definéiert fir Operatiounen op GPUs a spezialiséierte Prozessoren wéi NVIDIA PTX ze lueden. D'Ëmsetzung vum Standard ass bal fäerdeg Open MP 5.0 (Open Multi-Processing), déi 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. Zousätzlech Funktiounen wéi lescht Privatbedingunge, Scan- a Loop-Direktiven, Uerdnung an use_device_addr Ausdréck. Fir OpenMP an OpenACC ass d'Ënnerstëtzung bäigefüügt fir Oflaafoperatiounen op véierter Generatioun (Fidschi) a fënnefter Generatioun AMD Radeon (GCN) GPUs (VEGA 10 / VEGA 20).
  • Fir Sprooche vun der C Famill ass d'Funktioun "Zougang" bäigefüügt fir den Zougang vun der Funktioun op Objeten ze beschreiwen, déi duerch Referenz oder Zeiger passéiert sinn, an esou Objekter mat ganzer Argumenter ze verbannen, déi Informatioun iwwer d'Gréisst vun den Objeten enthalen. Fir a Verbindung mat "Zougang" ze schaffen, gëtt den Attribut "Typ" ëmgesat fir falschen Zougang vu Benotzerfunktiounen z'entdecken, zum Beispill wann Dir Wäerter an e Gebitt ausserhalb vun de Grenze vun der Array schreift. Och dobäi ass den "Symver" Attribut fir Symboler an enger ELF Datei mat spezifesche Versiounsnummeren ze associéieren.
  • Nei Warnungen dobäigesat:
    • "-Wstring-compare" (aktivéiert mat "-Wextra") - warnt iwwer d'Präsenz vun Ausdréck, an deenen Null mat dem Resultat vum Opruff vun de Strcmp- a Strncmp-Funktioune verglach gëtt, wat zu enger Konstante gläichwäerteg ass wéinst der Tatsaach, datt d'Längt vun engem Argument ass méi grouss wéi d'Gréisst vum Array am zweeten Argument.
    • "-Wzero-length-bounds" (aktivéiert mat "-Warray-bounds") - warnt iwwer Accès op Array-Elementer vun null Längt, wat zu enger Iwwerschreiwe vun aneren Donnéeën féieren kann.
    • D'"-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" an "-Wstringop-overflow" Warnungen goufen erweidert fir d'Zuel vun ausserhalb Situatiounen auszebauen. déi gehandhabt ginn.
  • Implementéiert d'Fäegkeet fir direkt breet Zeechen an Identifizéierer ze spezifizéieren mat der aktueller Kodéierung (UTF-8 par défaut) anstatt UCN Notatioun (\uNNNN oder \UNNNNNNNNN). Zum Beispill:

    statesch const int π = 3;
    int get_naïve_pi() {
    zréck π;
    }

  • Fir d'C Sprooch ass en Deel vun neie Featuren, déi am C2X Standard entwéckelt goufen, implementéiert (aktivéiert andeems Dir -std = c2x an -std = gnu2x spezifizéiert): Ënnerstëtzung fir d'Syntax "[[]]" ass erschéngt fir Attributer ze definéieren wéi an C++ (zum Beispill [[gnu ::const]], [[deprecated]], [[fallthrough]] an [[maybe_unused]]. Ënnerstëtzung fir "u8" Syntax dobäigesat fir Konstanten mat UTF-8 Zeechen ze definéieren.
    Dobäi nei macros zu . "%OB" an "%Ob" Ersatzstécker op strftime bäigefüügt.

  • De Standardmodus fir C ass "-fno-common", wat e méi effizienten Zougang zu globale Variablen op e puer Plattformen erlaabt.
  • Fir C ++ sinn ongeféier 16 Ännerungen an Innovatiounen ëmgesat ginn, entwéckelt am C ++ 20 Standard. Mat dobäi dat Schlësselwuert "constinit"
    an Ënnerstëtzung fir Schablounverlängerungen gouf implementéiert "Konzepter". Konzepter erlaben Iech e Set vu Schablounparameter Ufuerderunge ze definéieren, déi an der Zesummesetzung Zäit d'Set vun Argumenter limitéieren déi als Schablounparameter akzeptéiert kënne ginn. D'Konzepter kënne benotzt ginn fir logesch Inkonsistenz tëscht den Eegeschafte vun den Datentypen, déi an der Schabloun benotzt ginn, an den Datentypeigenschaften vun den Inputparameter ze vermeiden.

  • G ++ bitt Detektioun vun ondefinéiert Verhalen verursaacht duerch Ännerung vun konstanten Objeten duerch constexpr. Reduzéiert Erënnerungsverbrauch vum Compiler beim Berechnung vu constexpr. Nei Warnungen dobäigesat "-Wmismatched-Tags" an "-Wredundant-Tags".
  • Nei Kommandozeiloptioune goufen proposéiert:
    • "-fallocation-dce" fir onnéideg Pairen vun "nei" an "läschen" Betreiber ze läschen.
    • "-fprofile-partial-training" fir d'Gréisstoptimiséierung fir Code auszeschalten deen keen Trainingslaf huet.
    • "-fprofile-reproducible fir den Niveau vun der Profilreproducibilitéit ze kontrolléieren.
    • "-fprofile-prefix-path" fir de Basisquell-Build-Verzeichnis ze definéieren, deen fir eng separat Profilgeneratioun benotzt gëtt (fir "-fprofile-generate=profile_dir" an "-fprofile-use=profile_dir").
  • Am Warnungstext fir déi genannte Optiounen ginn Hyperlinks zur Verfügung gestallt, déi Iech erlaben an d'Dokumentatioun fir dës Optiounen ze goen. URL Ersatz gëtt kontrolléiert mat der "-fdiagnostics-urls" Optioun.
  • Preprocessor Operator dobäigesat "__huet_gebaut", déi benotzt ka ginn fir agebaute Funktiounen ze kontrolléieren.
  • Eng nei agebaute Funktioun "__builtin_roundeven" bäigefüügt mat enger Ëmsetzung vun der Ronnfunktioun, déi an der ISO/IEC TS 18661 Spezifizéierung definéiert ass, ähnlech wéi "Ronn", awer ronnen Deel méi wéi 0.5 erop (zu engem méi grousse Wäert), manner wéi 0.5 - erof (bis null), a gläich wéi 0.5 - ugefaange vun der Paritéit vun der nächster Ziffer.
  • Fir d'AARch64 Architektur ass d'Ënnerstëtzung fir d'SVE2 Extensioun bäigefüügt an d'Ënnerstëtzung fir SVE (Scalable Vector Extension) gouf verbessert, inklusiv zousätzlech Ënnerstëtzung fir agebaute SVE ACLE Funktiounen an Typen, an d'Benotzung vu Vektoriséierung. Ënnerstëtzung fir LSE (Large System Extensions) an TME (Transactional Memory Extension) gouf erweidert. Nei Instruktioune bäigefüügt, déi am Armv8.5-A an Armv8.6-A proposéiert goufen, inklusiv Instruktioune fir zoufälleg Zuelengeneratioun, Ronn, Memory Tag Bindung,
    bfloat16 a Matrixmultiplikatioun. Zousätzlech Prozessor Ënnerstëtzung
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Aarm Cortex-A34 an
    Marvell ThunderX3.

  • Zousätzlech Ënnerstëtzung fir ABI FDPIC (32-Bit Funktionspointer) fir ARM64. Nei entworf an optimiséiert Veraarbechtung vun 64-Bit Ganzt Operatiounen. Zousätzlech CPU Ënnerstëtzung
    Arm Cortex-A77,
    Aarm Cortex-A76AE an
    Arm Cortex-M35P. Erweidert Ënnerstëtzung fir ACLE Datenveraarbechtungsinstruktiounen, dorënner 32-Bit SIMD, 16-Bit Multiplikatioun, Latch Arithmetik, an aner DSP Algorithmus Optimisatiounen. Zousätzlech experimentell Ënnerstëtzung fir ACLE CDE (Custom Datapath Extension) Instruktiounen.

  • Bedeitend verbessert Code Generatioun a Vektoriséierung am Backend fir AMD GPUs baséiert op der GCN Mikroarchitektur.
  • Zousätzlech Ënnerstëtzung fir XMEGA-ähnlech Geräter fir AVR Architektur
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808ga, ATmega809, ATmega1608, 1609 3208, ATmega3209, ATmega4808 4809, ATmegaXNUMX an ATmegaXNUMX.

  • Eng nei Intel ENQCMD Instruktiounsset Architektur Extensioun (-menqcmd) gouf fir IA-32 / x86-64 Architekturen bäigefüügt. Zousätzlech Ënnerstëtzung fir Intel Cooperlake (-march = cooperlake, enthält d'AVX512BF16 ISA Extensioun) an Tigerlake (-march = tigerlake, enthält d'MOVDIRI, MOVDIR64B an AVX512VP2INTERSECT ISA Extensiounen) CPUs.
  • Eng Implementatioun vun der HSAIL (Heterogeneous System Architecture Intermediate Language) fir heterogen Rechensystemer baséiert op der HSA Architektur gouf ofgeschaaft a wäert wahrscheinlech an enger zukünfteg Verëffentlechung geläscht ginn.

Source: opennet.ru

Setzt e Commentaire