Izdaja zbirke prevajalnikov GCC 13

Po enem letu razvoja je bil izdan brezplačen prevajalnik GCC 13.1, prva pomembna izdaja v novi veji GCC 13.x. V skladu z novo shemo številčenja izdaj je bila v razvojnem procesu uporabljena različica 13.0, malo pred izidom GCC 13.1 pa se je že odcepila veja GCC 14.0, iz katere bo nastala naslednja večja izdaja GCC 14.1.

Večje spremembe:

  • GCC vključuje vmesnik za sestavljanje programov v programskem jeziku Modula-2. Podprto je sestavljanje kode, ki ustreza narečjem PIM2, PIM3 in PIM4, kot tudi sprejetemu standardu ISO za določen jezik.
  • V izvorno drevo GCC je bil dodan sprednji del z implementacijo prevajalnika jezika Rust, ki ga je pripravil projekt gccrs (GCC Rust). V trenutni obliki je sprednji konec označen kot poskusni in privzeto onemogočen. Ko je sprednji del pripravljen (predvidoma v naslednji izdaji), je mogoče uporabiti standardna orodja GCC za prevajanje programov v jeziku Rust, ne da bi bilo treba namestiti prevajalnik rustc, zgrajen z razvojem LLVM.
  • Mehanizem za optimizacijo časa povezave (LTO) je dodal podporo za strežnik opravil, ki ga podpira projekt GNU make, da optimizira izvajanje vzporednih gradenj v več nitih. V GCC se jobserver uporablja za paralelizacijo dela med optimizacijo LTO v kontekstu celotnega programa (WPA, Whole-program Analysis). Za interakcijo s strežnikom opravil se privzeto uporabljajo imenovane cevi (-jobserver-style=fifo).
  • Statični analizator (-fanalyzer) ponuja 20 novih diagnostičnih preverjanj, vključno z »-Wanalyzer-out-of-bounds«, »-Wanalyzer-allocation-size«, »-Wanalyzer-deref-before-check«, »-Wanalyzer- infinite -rekurzija" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Implementirana je možnost izpisa diagnostike v formatu SARIF, ki temelji na JSON. Novi format se lahko uporablja za pridobivanje rezultatov statične analize (GCC -fanalyzer), kot tudi za pridobivanje opozoril in informacij o napakah. Omogočanje se izvede z možnostjo »-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file«, kjer možnosti z »json« povzročijo izpis v GCC-specifični različici zapisa JSON .
  • Implementirane nekatere funkcije, definirane v standardu C23 C, kot je konstanta nullptr za definiranje ničelnih kazalcev, poenostavitev uporabe spremenljivih seznamov, razširitev zmožnosti enumeracij, atribut noreturn, omogočanje uporabe constexpr in auto pri definiranju objektov, typeof in typeof_unqual, nove ključne besede alignas, alignof, bool, false, static_assert, thread_local in true, ki omogočajo podajanje praznih oklepajev med inicializacijo.
  • Implementirane nekatere funkcije, opredeljene v standardu C++23, kot je možnost postavljanja oznak na koncu sestavljenih izrazov, združljivost s tipom char8_t, direktiva predprocesorja #warning, razmejeno (\u{}, \o{}, \x{}) in poimenovana ('\N{LATINSKA VELIKA ČRKA A}') ubežna zaporedja, statični operator(), statični operator[], operator enakosti znotraj izrazov, odprava nekaterih omejitev pri uporabi constexpr, podpora za UTF -8 v izvirnih besedilih.
  • libstdc++ ima izboljšano eksperimentalno podporo za standarda C++20 in C++23, na primer dodano podporo za datoteke glave in std::format, razširjene zmožnosti datoteke glave , dodani dodatni tipi s plavajočo vejico, implementirane datoteke glave in .
  • Dodani novi funkcijski atributi za dokumentiranje, da je deskriptor datoteke posredovan v celoštevilski spremenljivki: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" in "__attribute__((fd_arg_write(N)) ) " Podane atribute je mogoče uporabiti v statičnem analizatorju (-fanalyzer) za odkrivanje nepravilnega delovanja z deskriptorji datotek.
  • Dodan je nov atribut »__attribute__((assume(EXPR)))«, s katerim lahko prevajalniku poveste, da je izraz resničen in prevajalnik lahko uporabi to dejstvo, ne da bi ocenil izraz.
  • Dodana zastavica »-fstrict-flex-arrays=[level]« za izbiro vedenja pri ravnanju s prilagodljivimi elementi polja v strukturah (člani prilagodljive matrike, matrika nedoločene velikosti na koncu strukture, na primer »int b[]« ).
  • Dodana zastavica »-Wenum-int-mismatch« za opozorilo, če obstaja neujemanje med tipom enum in tipom celega števila.
  • Frontend za jezik Fortran v celoti podpira finalizacijo.
  • V sprednjem delu za jezik Go je dodana podpora za generične funkcije in tipe (generike) ter zagotovljena združljivost s paketi za jezik Go 1.18.
  • Zaledje za arhitekturo AArch64 podpira CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) in Arm Neoverse V2 (neoverse -v2). Možnosti "-march=" dodana podpora za argumente "armv9.1-a", "armv9.2-a" in "armv9.3-a". Dodana podpora za razširitve procesorja FEAT_LRCPC, FEAT_CSSC in FEAT_LSE2.
  • Podpora za CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) in Arm Cortex-M85 (cortex-m85) je bila dodana v zaledje za arhitekturo ARM.
  • Zaledje za arhitekturo x86 dodaja podporo za procesorje Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids in procesorje AMD Zen 4 (znver4). Implementirane so bile razširitve arhitekture nabora ukazov AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT in AMX-COMPLEX, predlagane v procesorjih Intel. Za jezike C in C++ v sistemih SSE2 je na voljo vrsta __bf16.
  • Zaledje za ustvarjanje kode za grafične procesorje AMD Radeon (GCN) vključuje možnost uporabe pospeševalnikov AMD Instinct MI200 za izboljšanje zmogljivosti OpenMP/OpenACC. Izboljšana vektorizacija z uporabo navodil SIMD.
  • Zaledne zmogljivosti za platformo LoongArch so bile znatno razširjene.
  • V ozadju za arhitekturo RISC-V je bila dodana podpora za CPU XuanTie C906 (thead-c906) za T-Head. Implementirana je podpora za vektorske procesorje, opredeljene v specifikaciji RISC-V Vector Extension Intrinsic 0.11. Dodana podpora za 30 razširitev specifikacije RISC-V.
  • Generiranje predmetov v skupni rabi z možnostjo -shared ustavi dodajanje zagonske kode po dodajanju okolja s plavajočo vejico, če so omogočene optimizacije -Ofast, -ffast-math ali -funsafe-math.
  • Podpora za obliko odpravljanja napak DWARF je implementirana v skoraj vseh konfiguracijah.
  • Dodana možnost "-gz=zstd" za stiskanje informacij o odpravljanju napak z uporabo algoritma Zstandard. Podpora za starejši način stiskanja za odpravljanje napak "-gz=zlib-gnu" je bila ukinjena.
  • Dodana začetna podpora za OpenMP 5.2 (Open Multi-Processing) in nadaljnja implementacija standardov OpenMP 5.0 in 5.1, ki opredeljujejo API-je in metode za uporabo metod vzporednega programiranja v večjedrnih in hibridnih (CPU+GPU/DSP) sistemih s skupnim pomnilnikom in vektorizacijske enote (SIMD).
  • Podpora za podedovano obliko shranjevanja informacij o odpravljanju napak »STABS« (omogočeno z možnostma -gstabs in -gxcoff), ustvarjeno v osemdesetih letih prejšnjega stoletja in uporabljeno v razhroščevalniku dbx, je bila ukinjena.
  • Podpora za Solaris 11.3 je bila opuščena (koda za podporo tej platformi bo odstranjena v prihodnji izdaji).

Vir: opennet.ru

Dodaj komentar