Vrystelling van die GCC 13 samesteller suite

Na 'n jaar van ontwikkeling is die vrystelling van die gratis GCC 13.1-samestellersuite vrygestel, die eerste betekenisvolle vrystelling in die nuwe GCC 13.x-tak. Onder die nuwe vrystellingnommerskema is weergawe 13.0 tydens ontwikkeling gebruik, en kort voor die vrystelling van GCC 13.1 was die GCC 14.0-tak reeds gevurk, waaruit die volgende beduidende vrystelling van GCC 14.1 gevorm sal word.

Belangrikste veranderinge:

  • Die GCC het 'n frontend vir die bou van programme in die Modula-2-programmeertaal aanvaar. Dit ondersteun boukode wat ooreenstem met die PIM2-, PIM3- en PIM4-dialekte, sowel as die aanvaarde ISO-standaard vir daardie taal.
  • 'n Frontend met die implementering van die Rust-taalsamesteller wat deur die gccrs-projek (GCC Rust) voorberei is, is by die GCC-bronboom gevoeg. In die huidige aansig word die forntend as eksperimenteel gemerk en by verstek gedeaktiveer. Sodra die frontend gereed is (verwag in die volgende uitgawe), kan die standaard GCC-gereedskapstel gebruik word om Rust-programme saam te stel sonder dat dit nodig is om die rustc-samesteller wat gebou is met behulp van LLVM-ontwikkelings te installeer.
  • Skakel-in-stap-optimalisering (LTO) voeg ondersteuning by vir 'n werkbediener (werkbediener) wat deur die GNU make-projek onderhou word om parallelle bou-uitvoering oor verskeie drade te optimaliseer. In GCC word die werkbediener gebruik om werk te paralleliseer tydens LTO-optimering in die konteks van die hele program (WPA, Whole-program Analysis). Benoemde pype (--jobserver-style=fifo) word by verstek gebruik om met die jobserver te kommunikeer.
  • Die statiese ontleder (-fanalyzer) bied 20 nuwe diagnostiese kontroles, insluitend "-Wanalyzer-buite-grense", "-Wanalyzer-toewysingsgrootte", "-Wanalyzer-deref-before-check", "-Wanalyzer- oneindig -rekursie" -Wanalyzer-spring-deur-nul", "-Wanalyzer-va-lys-lek".
  • Die vermoë om diagnostiek in SARIF-formaat gebaseer op JSON uit te voer, is geïmplementeer. Die nuwe formaat kan gebruik word om statiese analise resultate (GCC -fanalyzer) te kry, asook om inligting oor waarskuwings en foute te kry. Aktivering word gedoen met die opsie "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", waar opsies met "json" lei tot uitvoer in 'n GCC-spesifieke variant van die JSON-formaat .
  • Sommige kenmerke wat in die C23 C-standaard gedefinieer is, geïmplementeer, soos die nullptr-konstante vir die definisie van nulwysers, wat dit makliker maak om lyste met 'n veranderlike aantal argumente (variadic) te gebruik, die vermoëns van enums uit te brei, die noreturn-kenmerk, wat die gebruik van constexpr en auto wanneer objekte gedefinieer word, die tipe en tipe_onkwaal, nuwe sleutelwoorde alignas, alignof, bool, false, static_assert, thread_local en true, laat leë hakies toe by inisialisering.
  • Sommige kenmerke wat in die C++23-standaard gedefinieer is, geïmplementeer, soos die vermoë om punte aan die einde van saamgestelde uitdrukkings te plaas, verenigbaarheid met die char8_t-tipe, die #warning-voorverwerker-direktief, afgebaken deur (\u{}, \o{} , \x{}), en benoemde ('\N{LATYN HOOFLETTER A}') ontsnapreekse, statiese operateur(), statiese operateur[], gelykheidsoperateur binne uitdrukkings, uitsondering van sekere beperkings op die gebruik van constexpr, ondersteuning vir UTF-8 in brontekste.
  • Verbeterde eksperimentele ondersteuning vir C++20- en C++23-standaarde in libstdc++, soos die byvoeging van koplêerondersteuning en std::formaat, uitgebreide koplêervermoëns , addisionele swaaipunttipes bygevoeg, koplêers geïmplementeer En .
  • Het nuwe funksie-kenmerke bygevoeg om te dokumenteer dat 'n lêerbeskrywer in 'n heelgetalveranderlike deurgegee word: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", en "__attribute__((fd_arg_write(N) )) ". Die gespesifiseerde eienskappe kan in 'n statiese ontleder (-fanalyzer) gebruik word om verkeerde werk met lêerbeskrywers op te spoor.
  • 'n Nuwe kenmerk "__attribute__((assume(EXPR)))" is bygevoeg, waarmee jy vir die samesteller kan sê dat die uitdrukking waar is en die samesteller hierdie feit kan gebruik sonder om die uitdrukking te evalueer.
  • Bygevoeg "-fstrict-flex-arrays=[level]" vlag om gedrag te kies wanneer 'n buigsame skikking element in strukture verwerk word (Flexible Array Members, 'n skikking van onbepaalde grootte aan die einde van die struktuur, byvoorbeeld, "int b[] ").
  • Bygevoeg "-Wenum-int-mismatch" vlag om waarskuwings uit te reik as daar 'n wanverhouding tussen 'n opgesomde tipe en 'n heelgetaltipe is.
  • Die Fortran-voorkant het volle ondersteuning vir finalisering.
  • Ondersteuning vir generiese funksies en tipes (generiese) is by die voorkant vir die Go-taal gevoeg, en versoenbaarheid met pakkette vir die Go 1.18-taal is verseker.
  • AArch64 backend ondersteun CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3), en Arm Neoverse V2 (neoverse -v2) . Ondersteuning vir "armv9.1-a", "armv9.2-a" en "armv9.3-a" argumente is by die "-march=" opsie gevoeg. Bygevoeg ondersteuning vir FEAT_LRCPC, FEAT_CSSC en FEAT_LSE2 verwerker uitbreidings.
  • Ondersteuning vir STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c), en Arm Cortex-M85 (cortex-m85) SVE's is by die ARM-argitektuur-agterkant gevoeg.
  • Ondersteuning vir Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, en AMD Zen 86 (znver4) verwerkers is by die x4 backend gevoeg. Die AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT en AMX-COMPLEX instruksiestel-argitektuuruitbreidings wat in Intel-verwerkers voorgestel word, is geïmplementeer. Vir C en C++ op stelsels met SSE2 word die __bf16 tipe verskaf.
  • Die kodegenerering-agtergrond vir AMD Radeon GPU's (GCN) implementeer die vermoë om AMD Instinct MI200-versnellers te gebruik om OpenMP/OpenACC-werkverrigting te verbeter. Verbeterde vektorisering met behulp van SIMD-instruksies.
  • Aansienlik uitgebreide backend-vermoëns vir die LoongArch-platform.
  • Bygevoeg ondersteuning vir CPU T-Head se XuanTie C906 (thead-c906) in die RISC-V backend. Geïmplementeerde ondersteuning vir vektorhanteerders gedefinieer in die RISC-V Vector Extension Intrinsic 0.11 spesifikasie. Bygevoeg ondersteuning vir 30 RISC-V spesifikasie uitbreidings.
  • Wanneer gedeelde voorwerpe met die "-shared"-opsie gegenereer word, word opstartkode nie meer bygevoeg nadat 'n swaaipunt-omgewing bygevoeg is as die "-Ofast", "-ffast-math" of "-funsafe-math-optimizations"-optimalisasies geaktiveer is .
  • Ondersteuning vir die DWARF-ontfoutingsformaat word in byna alle konfigurasies geïmplementeer.
  • Bygevoeg "-gz=zstd" opsie om ontfout inligting saam te komprimeer met behulp van die Zstandard algoritme. Verwyder ondersteuning vir die verouderde ontfoutinginligting-kompressiemodus "-gz=zlib-gnu".
  • Aanvanklike ondersteuning vir OpenMP 5.2 (Open Multi-Processing) is bygevoeg en implementering van die OpenMP 5.0 en 5.1 standaarde het voortgegaan, wat API's en metodes definieer vir die toepassing van parallelle programmeringsmetodes op multi-kern en hibriede (CPU + GPU / DSP) stelsels met gedeelde geheue en vektoriseringseenhede (SIMD).
  • Ondersteuning vir die erfenis ontfout inligting stoor formaat "STABS" (geaktiveer deur die -gstabs en -gxcoff opsies), geskep in die 1980's en gebruik in die dbx ontfouter, is gestaak.
  • Verouderde ondersteuning vir Solaris 11.3 (kode om hierdie platform te ondersteun sal in 'n toekomstige vrystelling verwyder word).

Bron: opennet.ru

Voeg 'n opmerking