GCC 13 kompilaatorikomplekti väljalase

Pärast aastast arendustööd on välja antud tasuta GCC 13.1 kompilaatorikomplekt, mis on esimene oluline väljalase uues GCC 13.x harus. Uue väljalaske nummerdamisskeemi järgi kasutati arenduse käigus versiooni 13.0 ja veidi enne GCC 13.1 väljaandmist oli juba hargnemine GCC 14.0 haru, millest moodustub järgmine oluline GCC 14.1 väljalase.

Peamised muudatused:

  • GCC võttis Modula-2 programmeerimiskeeles programmide koostamiseks kasutusele kasutajaliidese. See toetab ehituskoodi, mis vastab PIM2, PIM3 ja PIM4 murretele, samuti selle keele aktsepteeritud ISO standardile.
  • GCC lähtepuusse on lisatud gccrs projekti (GCC Rust) poolt ettevalmistatud Rust keele kompilaatori juurutamisega frontend. Praeguses vaates on forntend märgitud eksperimentaalseks ja vaikimisi keelatud. Kui kasutajaliides on valmis (eeldatavasti järgmises versioonis), saab standardset GCC tööriistakomplekti kasutada Rusti programmide kompileerimiseks, ilma et oleks vaja installida LLVM-i arenduste abil ehitatud rustc-kompilaatorit.
  • Link-in-Step Optimization (LTO) lisab toe tööserverile (tööserverile), mida haldab GNU make projekt, et optimeerida paralleelse ehituse täitmist mitme lõime vahel. GCC-s kasutatakse tööserverit LTO optimeerimise ajal töö paralleelseerimiseks kogu programmi kontekstis (WPA, Whole-program Analysis). Nimega torusid (--jobserver-style=fifo) kasutatakse vaikimisi tööserveriga suhtlemiseks.
  • Staatiline analüsaator (-fanalyzer) pakub 20 uut diagnostilist kontrolli, sealhulgas "-Wanalyzer-out-off-bounds", "-Wanalyzer-alllocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite". -rekursioon" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Rakendatud on võimalus väljastada JSON-il põhinevat diagnostikat SARIF-vormingus. Uut vormingut saab kasutada nii staatilise analüüsi tulemuste saamiseks (GCC -fanalyzer), kui ka hoiatuste ja vigade kohta info saamiseks. Lubamine toimub valikuga "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", kus valikud "json" annavad tulemuseks JSON-vormingu GCC-spetsiifilise variandi .
  • Rakendatud on mõned C23 C standardis määratletud funktsioonid, nagu nullptr konstant null-osutite määratlemiseks, muutes muutuva arvu argumentidega loendite kasutamise lihtsamaks (variadic), laiendades enumite võimalusi, atribuuti noreturn, võimaldades kasutada constexpr ja auto objektide määratlemisel, typeof ja typeof_unqual, uued märksõnad alignas, alignof, bool, false, static_assert, thread_local ja true, lubavad initsialiseerimisel tühje sulgusid.
  • Rakendatud on mõned C++23 standardis määratletud funktsioonid, näiteks võimalus panna märke liitavaldiste lõppu, ühilduvus tüübiga char8_t, #warning eeltöötluse direktiiv, mis on piiritletud (\u{}, \o{} , \x{}) ja nimega ('\N{LAADINA SUURTÄHT A}') paojärjestused, staatiline operaator(), staatiline operaator[], võrdusoperaator avaldistes, välja arvatud mõned piirangud constexpri kasutamisel, tugi UTF-8 jaoks lähtetekstides.
  • Täiustatud eksperimentaalne tugi C++20 ja C++23 standarditele rakenduses libstdc++, näiteks päisefaili toe lisamine ja std::formaat, laiendatud päisefaili võimalused , lisatud täiendavad ujukomatüübid, rakendatud päisefailid Ja .
  • Lisati uued funktsiooniatribuudid dokumenti, et failideskriptor edastatakse täisarvulises muutujas: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" ja "__attribute__((fd_arg_write(N)) )) ". Määratud atribuute saab kasutada staatilises analüsaatoris (-fanalyzer), et tuvastada ebaõige töö failideskriptoritega.
  • Lisatud on uus atribuut "__attribute__((assume(EXPR)))", millega saate kompilaatorile öelda, et avaldis on tõene ja kompilaator saab seda fakti kasutada ilma avaldist hindamata.
  • Lisatud lipp "-fstrict-flex-arrays=[level]", et valida käitumist paindliku massiivi elemendi töötlemisel struktuurides (Flexible Array Members, määramatu suurusega massiiv struktuuri lõpus, näiteks "int b[] ").
  • Lisatud on lipp "-Wenum-int-mismatch", et anda hoiatusi, kui loendatud tüüp ja täisarvu tüüp ei ühti.
  • Fortrani esiosal on lõplikuks vormistamiseks täielik tugi.
  • Go keele esiservale on lisatud üldiste funktsioonide ja tüüpide tugi (generics) ning tagatud on ühilduvus Go 1.18 keele pakettidega.
  • AArch64 taustaprogramm toetab CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) ja Arm Neoverse V2 (neoverse -v2) . Suvandile "-march=" on lisatud argumentide "armv9.1-a", "armv9.2-a" ja "armv9.3-a" tugi. Lisatud on FEAT_LRCPC, FEAT_CSSC ja FEAT_LSE2 protsessorilaiendite tugi.
  • ARM-i arhitektuuri taustaprogrammi on lisatud STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) ja Arm Cortex-M85 (cortex-m85) tugi.
  • X86 taustaprogrammile on lisatud Intel Raptor Lake'i, Meteor Lake'i, Sierra Foresti, Grand Ridge'i, Emerald Rapidsi, Granite Rapidsi ja AMD Zen 4 (znver4) protsessorite tugi. Rakendatud on Inteli protsessorites pakutud käsukomplekti arhitektuuri laiendused AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT ja AMX-COMPLEX. SSE2-ga süsteemides C ja C++ on tüüp __bf16.
  • AMD Radeoni GPU-de (GCN) koodi genereerimise taustaprogramm rakendab võimalust kasutada OpenMP/OpenACC jõudluse parandamiseks AMD Instinct MI200 kiirendeid. Täiustatud vektoriseerimine SIMD juhiste abil.
  • Oluliselt laiendatud LoongArchi platvormi taustsüsteemi võimalused.
  • RISC-V taustaprogrammis on lisatud CPU T-Headi XuanTie C906 (thead-c906) tugi. Rakendatud tugi vektorkäitlejatele, mis on määratletud spetsifikatsioonis RISC-V Vector Extension Intrinsic 0.11. Lisatud on 30 RISC-V spetsifikatsiooni laienduse tugi.
  • Jagatud objektide loomisel valikuga "-shared" ei lisata enam käivituskoodi pärast ujukomakeskkonna lisamist, kui optimeerimised "-Ofast", "-ffast-math" või "-funsafe-math-optimizations" on lubatud .
  • DWARF-silumisvormingu tugi on rakendatud peaaegu kõigis konfiguratsioonides.
  • Lisatud suvand "-gz=zstd" silumisinfo tihendamiseks Zstandardi algoritmi abil. Tugi on eemaldatud silumisinfo tihendusrežiimist "-gz=zlib-gnu".
  • Lisatud on OpenMP 5.2 (Open Multi-Processing) esialgne tugi ning jätkunud on OpenMP 5.0 ja 5.1 standardite juurutamine, määratledes API-d ja meetodid paralleelsete programmeerimismeetodite rakendamiseks mitmetuumalistes ja hübriidsüsteemides (CPU + GPU / DSP). jagatud mälu ja vektoriseerimisühikud (SIMD).
  • 1980. aastatel loodud ja dbx siluris kasutatud pärandsilumisteabe salvestusvormingu "STABS" (lubatud suvandite -gstabs ja -gxcoff) tugi on lõpetatud.
  • Solarise 11.3 tugi on aegunud (selle platvormi toetamise kood eemaldatakse tulevases versioonis).

Allikas: opennet.ru

Lisa kommentaar