Izdanje GCC 13 kompajlerskog paketa

Nakon godinu dana razvoja, pušten je besplatni paket kompajlera GCC 13.1, prvo značajno izdanje u novoj grani GCC 13.x. U skladu s novom šemom numeriranja izdanja, u procesu razvoja korištena je verzija 13.0, a neposredno prije izdanja GCC 13.1, grana GCC 14.0 se već razgranala, iz koje će se formirati sljedeće veliko izdanje, GCC 14.1.

Glavne promjene:

  • GCC uključuje frontend za sastavljanje programa u programskom jeziku Modula-2. Podržano je sklapanje koda koji odgovara dijalektima PIM2, PIM3 i PIM4, kao i prihvaćeni ISO standard za ovaj jezik.
  • Prednji kraj sa implementacijom kompajlera jezika Rust pripremljen od strane projekta gccrs (GCC Rust) je dodat GCC izvornom stablu. U svom trenutnom obliku, naprijed je označeno kao eksperimentalno i onemogućeno po defaultu. Kada je frontend spreman (očekuje se u sljedećem izdanju), standardni GCC alati se mogu koristiti za kompajliranje programa na Rust jeziku bez potrebe za instaliranjem rustc kompajlera, napravljenog korištenjem LLVM razvoja.
  • Mehanizam za optimizaciju vremena veze (LTO) je dodao podršku za poslužitelj zadataka koji podržava GNU make projekt radi optimizacije izvođenja paralelnih build-ova u više niti. U GCC-u, jobserver se koristi za paralelizaciju rada tokom LTO optimizacije u kontekstu cijelog programa (WPA, Analiza cijelog programa). Za interakciju s Jobserverom, imenovane cijevi se koriste po defaultu (-jobserver-style=fifo).
  • Statički analizator (-fanalyzer) nudi 20 novih dijagnostičkih provjera, uključujući "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- beskonačan -rekurzija" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Implementirana je mogućnost izlaza dijagnostike u SARIF formatu, baziranom na JSON-u. Novi format se može koristiti za dobijanje rezultata statičke analize (GCC -fanalyzer), kao i za dobijanje informacija o upozorenjima i greškama. Omogućavanje se vrši pomoću opcije "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", gdje opcije sa "json" rezultiraju izlazom u GCC-specifičnoj varijanti JSON formata .
  • Implementirane neke karakteristike definirane u C23 C standardu, kao što su nullptr konstanta za definiranje null pokazivača, pojednostavljivanje upotrebe varijabilnih lista, proširenje mogućnosti nabrajanja, atribut noreturn, omogućavanje upotrebe constexpr i auto pri definiranju objekata, tip i typeof_unqual, nove ključne riječi alignas, alignof, bool, false, static_assert, thread_local i true, dozvoljavajući da se prazne zagrade specificiraju tokom inicijalizacije.
  • Implementirane neke karakteristike definisane u C++23 standardu, kao što je mogućnost postavljanja oznaka na kraj složenih izraza, kompatibilnost sa tipom char8_t, direktiva preprocesora #warning, razgraničena (\u{}, \o{}, \x{}) i imenovane ('\N{LATINSKO VELIKO SLOVO A}') izlazne sekvence, statički operator(), statički operator[], operator jednakosti unutar izraza, eliminacija nekih ograničenja upotrebe constexpr, podrška za UTF -8 u izvornim tekstovima.
  • libstdc++ je poboljšao eksperimentalnu podršku za standarde C++20 i C++23, na primjer, dodavanjem podrške za zaglavlje i std::format, proširene mogućnosti zaglavlja , dodani dodatni tipovi s pomičnim zarezom, implementirani fajlovi zaglavlja I .
  • Dodani su novi atributi funkcije dokumentu da se deskriptor datoteke prosljeđuje u cjelobrojnoj varijabli: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" i "__attribute__((fd_arg_write(N)) ) " Navedeni atributi se mogu koristiti u statičkom analizatoru (-fanalyzer) za otkrivanje neispravnog rada deskriptora datoteka.
  • Dodan je novi atribut “__attribute__((assume(EXPR)))”, sa kojim možete reći kompajleru da je izraz istinit i prevodilac može koristiti ovu činjenicu bez evaluacije izraza.
  • Dodana je oznaka "-fstrict-flex-arrays=[level]" za odabir ponašanja prilikom rukovanja fleksibilnim elementima niza u strukturama (Fleksibilni članovi niza, niz neodređene veličine na kraju strukture, na primjer, "int b[]" ).
  • Dodata zastavica "-Wenum-int-mismatch" za upozorenje ako postoji neusklađenost između tipa enuma i tipa cjelobrojnog tipa.
  • Frontend za jezik Fortran u potpunosti podržava finalizaciju.
  • U prednjem dijelu za Go jezik, dodana je podrška za generičke funkcije i tipove (generike), a osigurana je kompatibilnost sa paketima za jezik Go 1.18.
  • Backend za AArch64 arhitekturu podržava CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) i Arm Neoverse V2 (neoverse -v2). Dodata podrška za argumente "armv9.1-a", "armv9.2-a" i "armv9.3-a" opciji "-march=". Dodata podrška za proširenja procesora FEAT_LRCPC, FEAT_CSSC i FEAT_LSE2.
  • Podrška za CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) i Arm Cortex-M85 (cortex-m85) dodata je u pozadinu za ARM arhitekturu.
  • Backend za x86 arhitekturu dodaje podršku za Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids procesore, kao i AMD Zen 4 (znver4) procesore. Implementirana su proširenja arhitekture skupa instrukcija AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT i AMX-COMPLEX, predložena u Intel procesorima. Za jezike C i C++ na SSE2 sistemima predviđen je tip __bf16.
  • Pozadinski deo za generisanje koda za AMD Radeon GPU (GCN) uključuje mogućnost korišćenja AMD Instinct MI200 akceleratora za poboljšanje performansi OpenMP/OpenACC. Poboljšana vektorizacija pomoću SIMD instrukcija.
  • Pozadinske mogućnosti za LoongArch platformu su značajno proširene.
  • U backend-u za RISC-V arhitekturu, dodata je podrška za T-Head-ov XuanTie C906 (thead-c906) CPU. Implementirana je podrška za vektorske procesore definirane u RISC-V Vector Extension Intrinsic 0.11 specifikaciji. Dodata podrška za 30 ekstenzija RISC-V specifikaciji.
  • Generiranje dijeljenih objekata s opcijom -shared zaustavlja dodavanje startnog koda nakon dodavanja okruženja s plutajućim zarezom ako su omogućene optimizacije -Ofast, -ffast-math ili -funsafe-math-optimization.
  • Podrška za DWARF debug format implementirana je u gotovo svim konfiguracijama.
  • Dodata opcija "-gz=zstd" za komprimiranje informacija o otklanjanju grešaka pomoću Zstandardnog algoritma. Podrška za naslijeđeni "-gz=zlib-gnu" način kompresije za otklanjanje grešaka je ukinut.
  • Dodata početna podrška za OpenMP 5.2 (Open Multi-Processing) i nastavak implementacije OpenMP 5.0 i 5.1 standarda, koji definiraju API-je i metode za primjenu metoda paralelnog programiranja na višejezgarnim i hibridnim (CPU+GPU/DSP) sistemima sa zajedničkom memorijom i vektorizacijske jedinice (SIMD).
  • Podrška za naslijeđeni format skladištenja informacija za otklanjanje grešaka “STABS” (omogućen opcijama -gstabs i -gxcoff), kreiran 1980-ih i korišten u dbx debuggeru, je ukinut.
  • Podrška za Solaris 11.3 je zastarjela (kod za podršku ovoj platformi će biti uklonjen u budućem izdanju).

izvor: opennet.ru

Dodajte komentar