GCC 13 -kääntäjäpaketin julkaisu

Vuoden kehitystyön jälkeen ilmainen GCC 13.1 -kääntäjäpaketti on julkaistu, ensimmäinen merkittävä julkaisu uudessa GCC 13.x -haarassa. Uuden julkaisunumerointimallin mukaan kehitystyössä käytettiin versiota 13.0, ja vähän ennen GCC 13.1:n julkaisua oli jo haarautunut GCC 14.0 -haara, josta muodostetaan seuraava merkittävä GCC 14.1 -julkaisu.

Suurimmat muutokset:

  • GCC otti käyttöön käyttöliittymän ohjelmien rakentamiseen Modula-2-ohjelmointikielellä. Se tukee PIM2-, PIM3- ja PIM4-murteiden sekä hyväksytyn ISO-standardin mukaista rakennuskoodia.
  • GCC:n lähdepuuhun on lisätty käyttöliittymä, jossa on toteutettu gccrs-projektin (GCC Rust) valmistelema Rust-kielen kääntäjä. Nykyisessä näkymässä forntend on merkitty kokeelliseksi ja oletuksena poistettu käytöstä. Kun käyttöliittymä on valmis (oletettavasti seuraavassa julkaisussa), standardia GCC-työkalupakkia voidaan käyttää Rust-ohjelmien kääntämiseen ilman, että tarvitsee asentaa rustc-kääntäjää, joka on rakennettu käyttämällä LLVM-kehitystä.
  • Link-in-Step Optimization (LTO) lisää tuen GNU make -projektin ylläpitämälle työpalvelimelle (jobserver), joka optimoi rinnakkaisen koontiversion suorittamisen useissa säikeissä. GCC:ssä työpalvelinta käytetään rinnakkain työn LTO-optimoinnin aikana koko ohjelman yhteydessä (WPA, Whole-program Analysis). Nimettyjä putkia (--jobserver-style=fifo) käytetään oletusarvoisesti kommunikoimaan työpalvelimen kanssa.
  • Staattinen analysaattori (-fanalyzer) tarjoaa 20 uutta diagnostista tarkistusta, mukaan lukien "-Wanalyzer-out-off-bounds", "-Wanalyzer-allokation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite" -rekursio" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Mahdollisuus lähettää diagnostiikkatietoja SARIF-muodossa JSON-pohjaisena on otettu käyttöön. Uudella formaatilla voidaan saada staattisia analyysituloksia (GCC -fanalyzer) sekä tietoa varoituksista ja virheistä. Käyttöönotto tehdään vaihtoehdolla "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", jossa vaihtoehdot "json" johtavat JSON-muodon GCC-kohtaiseen muunnelmaan. .
  • Toteutettu joitain C23 C-standardissa määriteltyjä ominaisuuksia, kuten nullptr-vakio nollaosoittimien määrittämiseen, mikä helpottaa luetteloiden käyttöä vaihtelevalla määrällä argumentteja (variadic), laajensi enumien ominaisuuksia, noreturn-attribuuttia, mahdollistaa constexpr ja auto määriteltäessä objekteja, typeof ja typeof_unqual, uudet avainsanat alignas, alignof, bool, false, static_assert, thread_local ja true sallivat tyhjät sulut alustuksen yhteydessä.
  • Toteutettu joitain C++23-standardissa määriteltyjä ominaisuuksia, kuten mahdollisuus sijoittaa merkkejä yhdistelmälausekkeiden loppuun, yhteensopivuus char8_t-tyypin kanssa, #warning preprocessor -direktiivi, jota rajaa (\u{}, \o{} , \x{}), ja nimetyt ('\N{LATINAINEN ISOA KIRJAIN A}') Escape-sekvenssit, staattinen operaattori(), staattinen operaattori[], yhtäläisyysoperaattori lausekkeiden sisällä, poikkeuksena joitain constexprin käytön rajoituksia, tuki UTF-8:lle lähdeteksteissä.
  • Parannettu kokeellinen tuki C++20- ja C++23-standardeille libstdc++:ssa, kuten otsikkotiedostotuen lisääminen ja std::format, laajennetut otsikkotiedostoominaisuudet , lisätty liukulukutyyppejä, otettu käyttöön otsikkotiedostot Ja .
  • Lisätty uudet funktioattribuutit dokumenttiin, että tiedostokuvaaja välitetään kokonaislukumuuttujassa: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" ja "__attribute__((fd_arg_write(N)) )) ". Määriteltyjä attribuutteja voidaan käyttää staattisessa analysaattorissa (-fanalyzer) havaitsemaan virheelliset tiedostokuvaajat.
  • Lisätty uusi attribuutti "__attribute__((oleta(EXPR)))", jolla voit kertoa kääntäjälle, että lauseke on tosi ja kääntäjä voi käyttää tätä tosiasiaa arvioimatta lauseketta.
  • Lisätty "-fstrict-flex-arrays=[taso]" -lippu, joka valitsee käyttäytymisen, kun käsitellään joustavaa taulukkoelementtiä rakenteissa (Flexible Array Members, määrittelemättömän kokoinen taulukko rakenteen lopussa, esimerkiksi "int b[] ").
  • Lisätty "-Wenum-int-mismatch"-merkki antaa varoituksia, jos lueteltu tyyppi ja kokonaislukutyyppi eivät täsmää.
  • Fortran-käyttöliittymällä on täysi tuki viimeistelylle.
  • Go-kielen käyttöliittymään on lisätty tuki yleisille toiminnoille ja tyypeille (generics), ja yhteensopivuus Go 1.18 -kielen pakettien kanssa on varmistettu.
  • AArch64 backend tukee prosessoria Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) ja Arm Neoverse V2 (neoverse -v2) . Tuki argumenteille "armv9.1-a", "armv9.2-a" ja "armv9.3-a" on lisätty "-march="-vaihtoehtoon. Lisätty tuki prosessorilaajennuksille FEAT_LRCPC, FEAT_CSSC ja FEAT_LSE2.
  • Tuki STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) ja Arm Cortex-M85 (cortex-m85) suorittimille on lisätty ARM-arkkitehtuurin taustajärjestelmään.
  • Tuki Intel Raptor Lake-, Meteor Lake-, Sierra Forest-, Grand Ridge-, Emerald Rapids-, Granite Rapids- ja AMD Zen 86 (znver4) -suorittimille on lisätty x4-taustajärjestelmään. Intel-suorittimissa ehdotetut käskysarjan arkkitehtuurilaajennukset AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT ja AMX-COMPLEX on otettu käyttöön. C- ja C++-järjestelmille, joissa on SSE2, tarjotaan __bf16-tyyppi.
  • AMD Radeon -grafiikkasuorittimien (GCN) koodin luontitausta mahdollistaa AMD Instinct MI200 -kiihdyttimien käytön OpenMP/OpenACC-suorituskyvyn parantamiseksi. Parannettu vektorointi SIMD-ohjeiden avulla.
  • Huomattavasti laajennetut taustaominaisuudet LoongArch-alustalle.
  • Lisätty tuki CPU T-Headin XuanTie C906:lle (thead-c906) RISC-V-taustajärjestelmässä. Toteutettu tuki vektorien käsittelijöille, jotka on määritelty RISC-V Vector Extension Intrinsic 0.11 -spesifikaatiossa. Lisätty tuki 30 RISC-V-määrittelylaajennukselle.
  • Kun luodaan jaettuja objekteja "-shared"-vaihtoehdolla, käynnistyskoodia ei enää lisätä liukulukuympäristön lisäämisen jälkeen, jos optimoinnit "-Ofast", "-ffast-math" tai "-funsafe-math-optimizations" ovat käytössä. .
  • DWARF-virheenkorjausmuodon tuki on toteutettu lähes kaikissa kokoonpanoissa.
  • Lisätty vaihtoehto "-gz=zstd" pakata virheenkorjaustiedot Zstandardin algoritmilla. Poistettu tuki vanhentuneelle virheenkorjaustietojen pakkaustilalle "-gz=zlib-gnu".
  • Alkuperäinen tuki OpenMP 5.2:lle (Open Multi-Processing) on ​​lisätty ja OpenMP 5.0- ja 5.1 -standardien käyttöönottoa on jatkettu määrittelemällä API:t ja menetelmät rinnakkaisten ohjelmointimenetelmien soveltamiseen moniytimisissä ja hybridijärjestelmissä (CPU + GPU / DSP) jaettu muisti ja vektorointiyksiköt (SIMD).
  • Tuki vanhentuneelle STABS-virheenkorjaustietojen tallennusmuodolle (käytössä -gstabs- ja -gxcoff-vaihtoehdoilla), joka luotiin 1980-luvulla ja jota käytettiin dbx-debuggerissa.
  • Vanhentunut tuki Solaris 11.3:lle (tätä alustaa tukeva koodi poistetaan tulevassa julkaisussa).

Lähde: opennet.ru

Lisää kommentti