Liberigo de la GCC 13 kompililo

Post jaro da evoluo, la senpaga kompililo GCC 13.1 estis publikigita, la unua signifa eldono en la nova branĉo GCC 13.x. Konforme al la nova eldonaĵa numera skemo, versio 13.0 estis uzita en la evoluprocezo, kaj baldaŭ antaŭ la eldono de GCC 13.1, la GCC 14.0 branĉo jam disbranĉiĝis, de kiu la sekva grava eldono, GCC 14.1, estus formita.

Ĉefaj ŝanĝoj:

  • GCC inkluzivas fasadon por kunmeti programojn en la programlingvo Modula-2. La aro de kodo responda al la PIM2, PIM3 kaj PIM4-dialektoj, same kiel la akceptita ISO-normo por antaŭfiksita lingvo, estas subtenata.
  • Antaŭaĵo kun efektivigo de la Rust-lingva kompililo preparita de la projekto gccrs (GCC Rust) estis aldonita al la fontarbo de GCC. En ĝia nuna formo, la antaŭa fino estas markita kiel eksperimenta kaj malŝaltita defaŭlte. Post kiam la fasado estas preta (atendita en la venonta eldono), la normaj GCC-iloj povas esti uzataj por kompili programojn en la Rust-lingvo sen la bezono instali la rustc-kompililon, konstruitan per LLVM-evoluoj.
  • La Link Time Optimization (LTO) motoro aldonis subtenon por la jobserver subtenata de la GNU make-projekto por optimumigi la ekzekuton de paralelaj konstruoj tra pluraj fadenoj. En GCC, jobserver estas uzata por paraleligi laboron dum LTO-optimumigo en la kunteksto de la tuta programo (WPA, Tut-programa Analizo). Por interagi kun jobserver, nomitaj pipoj estas uzataj defaŭlte (-jobserver-style=fifo).
  • La statika analizilo (-fanalyzer) ofertas 20 novajn diagnozajn kontrolojn, inkluzive de "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinita". -rekursio" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • La kapablo eligi diagnozon en la SARIF-formato, bazita sur JSON, estis efektivigita. La nova formato povas esti uzata por akiri statikajn analizrezultojn (GCC -fanalyzer), kaj ankaŭ por akiri avertajn kaj erarajn informojn. Ebligo estas farita per la opcio "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-dosiero", kie opcioj kun "json" rezultigas eligon en GCC-specifa varianto de la JSON-formato. .
  • Efektivigis kelkajn funkciojn difinitajn en la C23 C-normo, kiel ekzemple la nullptr-konstanto por difinado de nulaj montriloj, simpligante la uzon de variadikaj listoj, vastigante la kapablojn de listoj, la noreturn-atributon, permesante la uzon de constexpr kaj auto dum difinado de objektoj, la speco de kaj typeof_unqual, novaj ŝlosilvortoj alignas, alignof, bool, false, static_assert, thread_local kaj true, permesante al malplenaj krampoj esti specifitaj dum inicialigo.
  • Efektivigis kelkajn funkciojn difinitajn en la C++23 normo, kiel la kapablo meti markojn ĉe la fino de kunmetitaj esprimoj, kongruo kun la char8_t tipo, la #warning antaŭprocesora direktivo, limigita (\u{}, \o{}, \x{}) kaj nomitaj ('\N{LATINA MAJUSTALLETERO A}') eskapaj sekvencoj, senmova operatoro(), senmova operatoro[], egaleca operatoro ene de esprimoj, forigo de iuj limigoj pri la uzo de constexpr, subteno por UTF -8 en fontotekstoj.
  • libstdc++ plibonigis eksperimentan subtenon por C++20 kaj C++23-normoj, ekzemple, aldonante titoldosiersubtenon kaj std::format, pligrandigitaj kapa dosierkapabloj , pliaj glitkomaj tipoj aldonitaj, kapdosieroj efektivigitaj Kaj .
  • Aldonitaj novaj funkcio-atributoj por dokumenti, ke dosierpriskribilo estas transdonita en entjera variablo: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" kaj "__attribute__((fd_arg_write(N))) )" La specifitaj atributoj povas esti uzataj en senmova analizilo (-fanalyzer) por detekti malĝustan funkciadon de dosierpriskribiloj.
  • Aldonita nova atributo "__attribute__((supozu(EXPR)))", kun kiu vi povas diri al la kompililo ke la esprimo estas vera kaj la kompililo povas uzi ĉi tiun fakton sen taksi la esprimon.
  • Aldonita "-fstrict-flex-arrays=[nivelo]" flago por elekti konduton dum traktado de flekseblaj tabelelementoj en strukturoj (Flexible Array Members, tabelo de nedifinita grandeco ĉe la fino de strukturo, ekzemple, "int b[]" ).
  • Aldonita flago "-Wenum-int-mismatch" por averti ĉu estas miskongruo inter enum-tipo kaj entjera tipo.
  • La fasado por la lingvo Fortran plene subtenas finfinadon.
  • En la frontfino por la Go-lingvo, subteno por senmarkaj funkcioj kaj tipoj (generaĵoj) estis aldonita, kaj kongruo kun pakoj por la Go-lingvo 1.18 estis certigita.
  • La backend por la AArch64-arkitekturo subtenas CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) kaj Arm Neoverse V2 (neoverse). -v2). Aldonita subteno por "armv9.1-a", "armv9.2-a" kaj "armv9.3-a" argumentoj al la opcio "-march=". Aldonita subteno por FEAT_LRCPC, FEAT_CSSC kaj FEAT_LSE2 procesoraj etendaĵoj.
  • Subteno por CPU STAR-MC1 (stelo-mc1), Arm Cortex-X1C (cortex-x1c) kaj Arm Cortex-M85 (cortex-m85) estis aldonita al la backend por la ARM-arkitekturo.
  • La backend por x86-arkitekturo aldonas subtenon por procesoroj Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, kaj ankaŭ AMD Zen 4 (znver4) procesoroj. La arkitektur-etendoj de instrukcioj AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT kaj AMX-COMPLEX, proponitaj en Intel-procesoroj, estis efektivigitaj. Por C kaj C++-lingvoj sur SSE2-sistemoj, la __bf16-tipo estas provizita.
  • La koda generacia backend por AMD Radeon GPU-oj (GCN) inkluzivas la kapablon uzi AMD Instinct MI200-akceliloj por plibonigi la agadon de OpenMP/OpenACC. Plibonigita vektorizado uzante SIMD-instrukciojn.
  • La backend-kapabloj por la LoongArch-platformo estis signife vastigitaj.
  • En la backend por la arkitekturo RISC-V, subteno por la CPU XuanTie C906 (thead-c906) de T-Head estis aldonita. Subteno por vektorprocesoroj difinitaj en la RISC-V Vector Extension Intrinsic 0.11 specifo estis efektivigita. Aldonita subteno por 30 etendaĵoj al la RISC-V-specifo.
  • Generado de komunaj objektoj per la opcio -shared ĉesas aldoni ekkodon post aldonado de glitkoma medio se la -Ofast, -ffast-math, aŭ -funsafe-math-optimumigoj estas ebligitaj.
  • Subteno por la DWARF-sencimformato estas efektivigita en preskaŭ ĉiuj konfiguracioj.
  • Aldonita opcio "-gz=zstd" por kunpremi sencimigan informon uzante la Zstandard-algoritmon. Subteno por la heredaĵo "-gz=zlib-gnu" sencimiga kunprema reĝimo estis nuligita.
  • Aldonita komenca subteno por OpenMP 5.2 (Malferma Multi-Processing) kaj daŭra efektivigo de la OpenMP 5.0 kaj 5.1 normoj, kiuj difinas APIojn kaj metodojn por aplikado de paralelaj programaj metodoj sur multkernaj kaj hibridaj (CPU+GPU/DSP) sistemoj kun komuna memoro kaj vektorigaj unuoj (SIMD).
  • Subteno por la heredaĵo "STABS" sencimiga informstokado formato (aktivigita kun la opcioj -gstabs kaj -gxcoff), kreita en la 1980-aj jaroj kaj uzita en la dbx-erarseĉilo, estis nuligita.
  • Subteno por Solaris 11.3 estas malrekomendita (kodo por subteni ĉi tiun platformon estos forigita en estonta eldono).

fonto: opennet.ru

Aldoni komenton