GCC 13 kompilaatorite komplekti väljaanne

Aasta kestnud arendustöö tulemusena on avalikustatud GCC 13.1, vabade kompilaatorite uue seeria esialgne väljaanne. Uue versiooninumbreid käsitleva süsteemi kohaselt kasutati arenduse käigus versiooni 13.0 ning vahetult enne GCC 13.1 väljaandmist eraldus haru GCC 14.0, mille põhjal kujundatakse järgmine märkimisväärne väljaanne GCC 14.1.

Peamised muudatused:

  • GCC-sse on lisatud Modula-2 programmeerimiskeele jaoks mõeldud hajutussüsteemi eesmine osa. Toetatakse koodi kompileerimist, mis vastab PIM2, PIM3 ja PIM4 dialektidele ning keelele väljatöötatud ISO-standardile.
  • GCC lähtefailide puusse on lisatud Rust-keele kompilaatori eesmine osa, mille on valmistanud gccrs (GCC Rust) projekt. Praeguses versioonis on see eesmine osa märgitud katsetatavana ja on vaikesätete kohaselt välja lülitatud. Pärast eesmine osa valmimist (ooteaeg järgmises väljaandes) saab GCC standardkomplekti kasutada Rust-keeles programmide kompileerimiseks, ilma et oleks vajalik rustc kompilaatori installimine, mille on loonud LLVM-i alusel töötlus.
  • Optimeerimismehhanismi sidumise etapis (LTO) on lisatud toetust tööde haldamise serverile (jobserver), mida toetab GNU make paralleelse kogumise optimeerimise täitmiseks mitmesugustes voogudes. GCC-s kasutatakse jobserverit tööde paraliseerimiseks LTO optimeerimise kontekstis kogu programmi (WPA, Whole-program Analysis) jaoks. Jobserveriga suhtlemiseks kasutatakse vaikimisi nimetud kanaleid (—jobserver-style=fifo).
  • Statsionaarses analyseris (-fanalyzer) on pakutud 20 uut diagnostilist kontrolli, sealhulgas „-Wanalyzer-out-of-bounds”, „-Wanalyzer-allocation-size”, „-Wanalyzer-deref-before-check”, „-Wanalyzer-infinite-recursion”, „-Wanalyzer-jump-through-null”, „-Wanalyzer-va-list-leak”.
  • On rakendatud võimalus diagnostika väljastamiseks SARIF formaadis, mis põhineb JSON-il. Uut formaati saab kasutada staatilise analüüsi tulemustes (GCC -fanalyzer) ning hoiatuste ja vigade teabe saamiseks. Aktiveerimine toimub valiku kaudu „-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file”, kus „json” valikud põhjustavad GCC spetsiifilises JSON formaadis väljastamise.
  • On kasutusele võetud mitmed C23 standardis määratletud funktsioonid, nagu null-viidatud määramine nullptr abil, variatiivsete argumentide nimekirjade kasutamise lihtsustamine, enum-de võimaluste laiendamine, noreturn atribuut, constexpr ja auto kasutamise lubamine objektide määratlemisel, typeof ja typeof_unqual operaatorid, uued märksõnad alignas, alignof, bool, false, static_assert, thread_local ja true, ning tühjade sulgude kasutamise lubamine initsialiseerimisel.
  • On kasutusele võetud mitmed C++23 standardis määratletud funktsioonid, nagu etiketide paigutamine keerukate lausete lõppu, ühilduvus char8_t tüübiga, eelprotsessoridirektiiv #warning, jagatud (\u{}, \o{}, \x{}) ja nimelised (‘\N{LATIN CAPITAL LETTER A}’) escape-järjestused, staatiline operator(), staatiline operator[], võrdsuse operaator lausetes, mõnede constexpr-i kasutamise piirangute eemaldamine, ja UTF-8 toetamine lähtekoodides.
  • Libstdc++ on par改善了对C++20和C++23标准的实验支持,例如,新增了对头文件 和 std::format 的支持,扩展了头文件 的功能,增加了额外的浮点类型,实现了头文件 和 。
  • 新增了用于文档说明整数变量中传递的文件描述符的新函数属性: «__attribute__((fd_arg(N)))», «__attribute__((fd_arg_read(N)))» 和 «__attribute__((fd_arg_write(N)))»。这些属性可以在静态分析器 (-fanalyzer) 中使用,以识别对文件描述符的错误使用。
  • 新增了属性 «__attribute__((assume(EXPR)))»,通过该属性可以告知编译器表达式为真,编译器可以在不计算表达式的情况下利用这一事实。
  • 新增了标志 «-fstrict-flex-arrays=[level]»,用于选择处理结构中的灵活数组元素的行为(Flexible Array Members,即结构末尾的未定义大小数组,例如 «int b[]»)。
  • Lisatud on lipp „-Wenum-int-mismatch“, et kuvada hoiatustesid, kui esineb vastuolu loetletud tüübi ja täisarvu tüübi vahel.
  • Fronteendis on Fortrani keele täielik tugevat lõpetamist rakendatud.
  • Fronteendis on Go keele jaoks lisatud üldfunktsioonide ja -tüüpide (generics) tugi, tagades ühilduvuse Go 1.18 pakettidega.
  • Tagaplaanil on AArch64 arhitektuuri jaoks lisatud tugi CPU-dele Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) ja Arm Neoverse V2 (neoverse-v2). Valikusse „-march=” on lisatud argumentide tugi „armv9.1-a“, „armv9.2-a“ ja „armv9.3-a“. Samuti on lisatud toetused protsessori laiendustele FEAT_LRCPC, FEAT_CSSC ja FEAT_LSE2.
  • Tagaplaanil on ARM arhitektuuri jaoks lisatud tugi CPU-dele STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) ja Arm Cortex-M85 (cortex-m85).
  • Tagaplaanil on x86 arhitektuuri jaoks lisatud toetus Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids protsessoritele, samuti AMD Zen 4 (znver4) protsessoritele. Intel protsessorites on rakendatud AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT ja AMX-COMPLEX arhitektuurilaienemised. C ja C++ keeltes on SSE2 süsteemides saadaval tüüp __bf16.
  • GPU AMD Radeon (GCN) koodi genereerimise tagaplaanis on rakendatud AMD Instinct MI200 kiirendite kasutamise võimalus OpenMP/OpenACC jõudluse suurendamiseks. SIMD käsutamise ajakohastamine on paranenud.
  • Tagaplaanide võimalusi platvormil LoongArch on oluliselt laiendatud.
  • RISC-V arhitektuuri tagaplaanis on lisatud tugi CPU T-Head’s XuanTie C906 (thead-c906). Rakendatud on vektorkäsitlejate toetus, nagu on määratletud RISC-V Vector Extension Intrinsic 0.11 spetsifikatsioonis. Lisatud on tugi 30 RISC-V spetsifikatsiooni laiendusele.
  • Jagatud objektide loomisel, kui on valitud valik „-shared“, on lõpetatud käivituskoode lisamine pärast koha määramist ujuvate arvutuste jaoks, kui on lubatud optimeerimised „-Ofast“, „-ffast-math“ või „-funsafe-math-optimizations“.
  • Peaaegu kõigis konfiguratsioonides on rakendatud DWARF silumise formaadi toetus.
  • Lisatud on valik „-gz=zstd“ silumisinfo tihendamiseks Zstandard algoritmiga. Üksikute silumisinfo tihendamise režiimide „-gz=zlib-gnu“ toetus on lõpetatud.
  • Lisatud algne tugi OpenMP 5.2 (Open Multi-Processing) ning jätkatud OpenMP versioonide 5.0 ja 5.1 standardite rakendamine, mis määratlevad API ja rakendusmeetodid, et võimaldada paralleelset programmeerimist mitme tuumaga ja hübriidsete (CPU+GPU/DSP) süsteemide jaoks ühise mälu ja vektoriseerimise (SIMD) plokkidega.
  • Toetuse lõpetamine vananenud veadekodeerimise formaadile «STABS» (mis oli sisse lülitatud valikute -gstabs ja -gxcoff kaudu), mis loodi 1980. aastatel ja mida kasutati dbx siluri programmides.
  • Toetuse kuulutamine vananenuks Solaris 11.3 jaoks (selle platvormi toe kood eemaldatakse järgmises versioonis).

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster