Utjefte fan 'e GCC 10-kompilersuite

Nei in jier fan ûntwikkeling publisearre frijlitting fan in frije set kompilatoren GCC 10.1, de earste grutte release yn 'e nije GCC 10.x branch. Yn oerienstimming mei nij skema release nûmers, ferzje 10.0 waard brûkt tidens de ûntwikkeling proses, en koart foar de frijlitting fan GCC 10.1, de GCC 11.0 tûke hie al fertakke ôf, op basis fan hokker de folgjende wichtige release, GCC 11.1, soe wurde foarme.

GCC 10.1 is opmerklik foar de ymplemintaasje fan in protte ynnovaasjes yn 'e C++-taal ûntwikkele foar de C++20-standert, ferbetteringen yn ferbân mei de takomstige C-taalstandert (C2x), nije optimalisaasjes yn 'e kompiler-backends en eksperimintele stipe statyske analyze modus. Derneist hat it projekt by de tarieding fan in nije tûke de repository oerdroegen fan SVN nei Git.

haad feroarings:

  • Added eksperimintele modus fan statyske analyze "-fanalyzer", dy't boarne-yntinsive ynterprosedurale analyze fan koade-útfierpaden en gegevensstreamen yn in programma útfiert. De modus is by steat om te ûntdekken problemen op de kompilaasje stadium, lykas dûbele oproppen nei de frije () funksje foar ien ûnthâld gebiet, triem beskriuwing lekken, dereferencing en trochjaan nul pointers, tagong ta frijmakke ûnthâld blokken, mei help fan uninitialized wearden, etc. It gebrûk fan 'e nije modus foar OpenSSL-koade hat it al mooglik makke om te identifisearjen gefaarlike kwetsberens.
  • Ferbettere ynterprosedurale optimisaasjes. De IPA-SRA-pas (Interprocedural Scalar Shared Replacement) is opnij ûntworpen om te wurkjen op bindetiid en ferwideret ûnder oare no berekkene en weromjûn net brûkte wearden. Yn 'e "-O2"-optimalisaasjemodus is de opsje "-finline-funksjes" ynskeakele, dy't opnij is ôfstimd om kompakter koade te favorisearjen boppe útfieringsprestaasjes. It wurk fan 'e heuristyk foar inline-funksje-ynset is fersneld. Inline-útwreiding en funksje-kloningheuristyk kinne no ynformaasje oer weardeberiken brûke om de effektiviteit fan yndividuele transformaasjes te foarsizzen. Foar C++ is de krektens fan type-basearre aliasparsing ferbettere.
  • Enhanced Linking Time Optimizations (LTO). Nije útfierbere tafoege lto-dump om ynformaasje oer objektbestannen werom te setten mei LTO-bytekoade. Parallel LTO passes automatysk bepale it oantal tagelyk rinnende make taken en, as se kinne net wurde bepaald, brûk ynformaasje oer it oantal CPU kearnen as in parallelization faktor. De mooglikheid tafoege om LTO-bytekoade te komprimearjen mei it zstd-algoritme.
  • It optimalisearjen meganisme basearre op de resultaten fan koade profilearring (PGO - Profile-guided optimization) is ferbettere, dat generearret mear optimale koade basearre op in analyze fan de skaaimerken fan koade útfiering. Ferbettere profylûnderhâld by kompilaasje en skieding fan hjitte / kâlde koade. Fia de opsje "-fprofile-wearden» kin no maksimaal 4 profylwearden kontrolearje, bygelyks foar yndirekte oproppen en it leverjen fan krekter profylynformaasje.
  • Parallelle programmearring spesifikaasje ymplementearre foar C, C ++ en Fortran talen OpenACC 2.6, dy't ark definiearret foar it ôfladen fan operaasjes op GPU's en spesjalisearre processors lykas NVIDIA PTX. De ymplemintaasje fan de standert is hast klear Iepenje MP 5.0 (Iepen Multi-Processing), dy't definiearret de API en metoaden foar it tapassen fan parallelle programmearring metoaden op multi-core en hybride (CPU + GPU / DSP) systemen mei dielde ûnthâld en vectorization ienheden (SIMD). Tafoege funksjes lykas lêsteprivate betingsten, scan- en loop-rjochtlinen, oarder en use_device_addr-útdrukkingen. Foar OpenMP en OpenACC is stipe tafoege foar ôfladen fan operaasjes op fjirde-generaasje (Fiji) en fyfde-generaasje AMD Radeon (GCN) GPU's (VEGA 10 / VEGA 20).
  • Foar talen fan 'e C-famylje is de funksje "tagong" tafoege om de tagong fan 'e funksje te beskriuwen foar objekten dy't troch referinsje of oanwizer binne trochjûn, en om sokke objekten te assosjearjen mei integerarguminten dy't ynformaasje befetsje oer de grutte fan 'e objekten. Om te wurkjen yn gearhing mei "tagong", wurdt it "type" attribút ymplementearre om ferkearde tagong fan brûkersfunksjes te detektearjen, bygelyks by it skriuwen fan wearden nei in gebiet bûten de grinzen fan 'e array. Ek tafoege is it "symver" attribút om symboalen te assosjearjen yn in ELF-bestân mei spesifike ferzjenûmers.
  • Nije warskôgings tafoege:
    • "-Wstring-compare" (ynskeakele mei "-Wextra") - warskôget oer de oanwêzigens fan útdrukkingen wêryn nul wurdt fergelike mei it resultaat fan it oproppen fan de strcmp- en strncmp-funksjes, wat lykweardich is oan in konstante fanwege it feit dat de lingte fan ien argumint is grutter as de grutte fan 'e array yn it twadde argumint.
    • "-Wzero-length-bounds" (ynskeakele mei "-Warray-bounds") - warskôget oer tagong ta array-eleminten fan nul lingte, wat liede kin ta it oerskriuwen fan oare gegevens.
    • De warskôgingen "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" en "-Wstringop-overflow" binne útwreide om it oantal bûten-grins situaasjes út te wreidzjen dy't behannele wurde.
  • Implementearre de mooglikheid om direkt brede karakters te spesifisearjen yn identifiers mei de hjoeddeistige kodearring (UTF-8 standert) ynstee fan UCN-notaasje (\uNNNN of \UNNNNNNNNN). Bygelyks:

    static const int π = 3;
    int get_naïve_pi() {
    werom π;
    }

  • Foar de C-taal is in diel fan nije funksjes ûntwikkele binnen de C2X-standert ymplementearre (ynskeakele troch it opjaan fan -std=c2x en -std=gnu2x): stipe foar de "[[]]"-syntaksis is ferskynd foar it definiearjen fan attributen lykas yn C++ (bygelyks [[gnu ::const]], [[ferâldere]], [[fallthrough]] en [[miskien_unused]]. Stipe tafoege foar "u8"-syntaksis foar it definiearjen fan konstanten mei UTF-8-tekens.
    Nije makro's tafoege oan . "%OB" en "%Ob" substitúsjes tafoege oan strftime.

  • De standert modus foar C is "-fno-common", wêrtroch effisjintere tagong ta globale fariabelen op guon platfoarms mooglik is.
  • Foar C ++ binne sawat 16 feroarings en ynnovaasjes ymplementearre, ûntwikkele yn 'e C ++ 20-standert. Ynklusyf it tafoege kaaiwurd "constinit"
    en stipe foar sjabloan-útwreidings is ymplementearre "konsepten". Konsepten kinne jo definiearje in set fan sjabloan parameter easken dy't, op gearstalling tiid, beheine de set fan arguminten dy't kin wurde akseptearre as sjabloan parameters. De begripen kinne brûkt wurde om logyske ynkonsistinsjes te foarkommen tusken de eigenskippen fan 'e gegevenstypen dy't brûkt wurde binnen it sjabloan en de gegevenstype-eigenskippen fan' e ynfierparameters.

  • G ++ jout deteksje fan ûndefiniearre gedrach feroarsake troch feroarjen fan konstante objekten fia constexpr. Reduzearre ûnthâld konsumpsje troch de gearstaller by it berekkenjen fan constexpr. Nije warskôgingen tafoege "-Wmismatched-tags" en "-Wredundant-tags".
  • Nije kommandorigelopsjes binne foarsteld:
    • "-fallocation-dce" om ûnnedige pearen fan "nije" en "wiskje" operators te ferwiderjen.
    • "-fprofile-partial-training" om grutte-optimalisaasje út te skeakeljen foar koade dy't gjin trainingslop hat.
    • "-fprofile-reprodusearber om it nivo fan profylreprodusearberens te kontrolearjen.
    • "-fprofile-prefix-path" om de basisboarne-buildmap te definiearjen dy't brûkt wurdt foar aparte profylgeneraasje (foar "-fprofile-generate=profile_dir" en "-fprofile-use=profile_dir").
  • Yn 'e warskôgingstekst foar de neamde opsjes wurde hyperlinks foarsjoen wêrmei jo nei de dokumintaasje foar dizze opsjes kinne gean. URL-ferfanging wurdt regele mei de opsje "-fdiagnostics-urls".
  • Preprocessor-operator tafoege "__has_ynboud", dat kin wurde brûkt om te kontrolearjen op ynboude funksjes.
  • In nije ynboude funksje tafoege "__builtin_roundeven" mei in ymplemintaasje fan 'e rûningsfunksje definieare yn' e ISO/IEC TS 18661-spesifikaasje, fergelykber mei "rûn", mar rûn diel grutter dan 0.5 omheech (nei in gruttere wearde), minder dan 0.5 - del (oant nul), en gelyk oan 0.5 - begjinnend fan de pariteit fan it foarlêste sifer.
  • Foar de AArch64-arsjitektuer is stipe foar de SVE2-útwreiding tafoege en stipe foar SVE (Scalable Vector Extension) is ferbettere, ynklusyf tafoege stipe foar ynboude SVE ACLE-funksjes en -typen, en it brûken fan fektorisaasje. Stipe foar LSE (Large System Extensions) en TME (Transactional Memory Extension) is útwreide. Nije ynstruksjes tafoege foarsteld yn Armv8.5-A en Armv8.6-A, ynklusyf ynstruksjes foar generaasje fan willekeurige getallen, ôfrûning, bining fan ûnthâld tags,
    bfloat16 en matrix fermannichfâldigje. Added prosessor stipe
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 en
    Marvell ThunderX3.

  • Stipe tafoege foar ABI FDPIC (32-bit funksje pointers) foar ARM64. Opnij ûntwurpen en optimalisearre ferwurking fan 64-bit integer operaasjes. Added CPU-stipe
    Arm Cortex-A77,
    Arm Cortex-A76AE en
    Arm Cortex-M35P. Utwreide stipe foar ynstruksjes foar ACLE-gegevensferwurking, ynklusyf 32-bit SIMD, 16-bit multiplikaasje, latch-arithmetyk, en oare DSP-algoritme-optimisaasjes. Eksperimintele stipe tafoege foar ynstruksjes foar ACLE CDE (Custom Datapath Extension).

  • Signifikant ferbettere koade generaasje en vectorization yn de efterkant foar AMD GPUs basearre op de GCN microarchitecture.
  • Stipe tafoege foar XMEGA-like apparaten foar AVR-arsjitektuer
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808ga, ATmega809ga, ATmega1608ga, 1609 3208, ATmega3209, ATmega4808 4809, ATmegaXNUMX en ATmegaXNUMX.

  • In nije Intel ENQCMD ynstruksje set arsjitektuer útwreiding (-menqcmd) is tafoege foar IA-32 / x86-64 arsjitektuer. Stipe tafoege foar Intel Cooperlake (-march = cooperlake, omfettet de AVX512BF16 ISA-útwreiding) en Tigerlake (-march = tigerlake, omfettet de MOVDIRI, MOVDIR64B en AVX512VP2INTERSECT ISA-útwreidingen) CPU's.
  • In ymplemintaasje fan 'e HSAIL (Heterogeneous System Architecture Intermediate Language) foar heterogene kompjûtersystemen basearre op 'e HSA-arsjitektuer is ôfkard en sil wierskynlik fuortsmiten wurde yn in takomstige release.

Boarne: opennet.ru

Add a comment