Izdanje paketa prevoditelja GCC 13

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

Velike promjene:

  • GCC uključuje sučelje za sastavljanje programa u programskom jeziku Modula-2. Podržano je sklapanje koda koji odgovara dijalektima PIM2, PIM3 i PIM4, kao i prihvaćenom ISO standardu za određeni jezik.
  • Prednji dio s implementacijom prevoditelja jezika Rust koji je pripremio gccrs projekt (GCC Rust) dodan je GCC izvornom stablu. U svom trenutnom obliku, prednji je kraj označen kao eksperimentalni i onemogućen prema zadanim postavkama. Jednom kada sučelje bude spremno (očekuje se u sljedećem izdanju), standardni GCC alati mogu se koristiti za kompajliranje programa u Rust jeziku bez potrebe za instaliranjem rustc prevoditelja, izgrađenog korištenjem LLVM razvoja.
  • Mehanizam za optimizaciju vremena povezivanja (LTO) dodao je podršku za poslužitelj poslova podržan od strane GNU make projekta za optimizaciju izvođenja paralelnih nadogradnji u više niti. U GCC-u, jobserver se koristi za paralelizaciju rada tijekom LTO optimizacije u kontekstu cijelog programa (WPA, Whole-program Analysis). Za interakciju s poslužiteljem poslova, imenovane cijevi se koriste prema zadanim postavkama (-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- infinite -rekurzija" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Implementirana je mogućnost ispisa dijagnostike u SARIF formatu, temeljenom na JSON-u. Novi format se može koristiti za dobivanje rezultata statičke analize (GCC -fanalyzer), kao i za dobivanje 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 s "json" rezultiraju izlazom u GCC-specifičnoj varijanti JSON formata .
  • Implementirane su neke značajke definirane u standardu C23 C, kao što je konstanta nullptr za definiranje null pokazivača, pojednostavljenje upotrebe varijacijskih popisa, proširenje mogućnosti nabrajanja, atribut noreturn, dopuštanje upotrebe constexpr i auto pri definiranju objekata, typeof i typeof_unqual, nove ključne riječi alignas, alignof, bool, false, static_assert, thread_local i true, dopuštajući navođenje praznih zagrada tijekom inicijalizacije.
  • Implementirane su neke značajke definirane u standardu C++23, kao što je mogućnost postavljanja oznaka na kraj složenih izraza, kompatibilnost s tipom char8_t, direktiva pretprocesora #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-a, podrška za UTF -8 u izvornim tekstovima.
  • libstdc++ ima poboljšanu eksperimentalnu podršku za C++20 i C++23 standarde, na primjer, dodavanje podrške za datoteku zaglavlja i std::format, proširene mogućnosti datoteke zaglavlja , dodane dodatne vrste pomičnog zareza, implementirane datoteke zaglavlja I .
  • Dodani su novi atributi funkcije za dokument da se deskriptor datoteke prosljeđuje u varijabli cijelog broja: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" i "__attribute__((fd_arg_write(N)) )" Navedeni atributi mogu se koristiti u statičkom analizatoru (-fanalyzer) za otkrivanje netočnog rada s deskriptorima datoteka.
  • Dodan je novi atribut “__attribute__((assume(EXPR)))”, s kojim možete reći prevoditelju da je izraz istinit i prevodilac može koristiti tu činjenicu bez evaluacije izraza.
  • Dodana je zastavica "-fstrict-flex-arrays=[razina]" za odabir ponašanja pri rukovanju fleksibilnim elementima niza u strukturama (fleksibilni članovi niza, niz neodređene veličine na kraju strukture, na primjer, "int b[]" ).
  • Dodana je zastavica "-Wenum-int-mismatch" za upozorenje ako postoji neslaganje između tipa enum i tipa cijelog broja.
  • Sučelje za jezik Fortran u potpunosti podržava finalizaciju.
  • U front endu za Go jezik dodana je podrška za generičke funkcije i tipove (generike) te je osigurana kompatibilnost s paketima za Go jezik 1.18.
  • Pozadina 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). Dodana je podrška za argumente "armv9.1-a", "armv9.2-a" i "armv9.3-a" opciji "-march=". Dodana 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) dodana je u pozadinu za ARM arhitekturu.
  • Pozadina za x86 arhitekturu dodaje podršku za procesore Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, kao i AMD Zen 4 (znver4). 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 Intelovim procesorima. Za jezike C i C++ na SSE2 sustavima postoji tip __bf16.
  • Pozadina za generiranje koda za AMD Radeon GPU (GCN) uključuje mogućnost korištenja AMD Instinct MI200 akceleratora za poboljšanje performansi OpenMP/OpenACC. Poboljšana vektorizacija pomoću SIMD uputa.
  • Pozadinske mogućnosti za LoongArch platformu značajno su proširene.
  • U pozadini za RISC-V arhitekturu, dodana je podrška za T-Head XuanTie C906 (thead-c906) CPU. Implementirana je podrška za vektorske procesore definirane u specifikaciji RISC-V Vector Extension Intrinsic 0.11. Dodana podrška za 30 proširenja RISC-V specifikacije.
  • Generiranje zajedničkih objekata s opcijom -shared zaustavlja dodavanje koda za pokretanje nakon dodavanja okruženja s pomičnim zarezom ako su omogućene optimizacije -Ofast, -ffast-math ili -funsafe-math.
  • Podrška za DWARF debug format implementirana je u gotovo svim konfiguracijama.
  • Dodana opcija "-gz=zstd" za komprimiranje informacija o otklanjanju pogrešaka pomoću Zstandardnog algoritma. Podrška za naslijeđeni način kompresije otklanjanja pogrešaka "-gz=zlib-gnu" je prekinuta.
  • Dodana početna podrška za OpenMP 5.2 (Open Multi-Processing) i kontinuirana implementacija standarda OpenMP 5.0 i 5.1, koji definiraju API-je i metode za primjenu metoda paralelnog programiranja na višejezgrenim i hibridnim (CPU+GPU/DSP) sustavima s dijeljenom memorijom i jedinice za vektorizaciju (SIMD).
  • Podrška za naslijeđeni format za pohranu informacija o otklanjanju pogrešaka "STABS" (omogućen s opcijama -gstabs i -gxcoff), kreiran 1980-ih i korišten u dbx debuggeru, ukinut je.
  • Podrška za Solaris 11.3 je zastarjela (kôd za podršku ovoj platformi bit će uklonjen u budućem izdanju).

Izvor: opennet.ru

Dodajte komentar