Kutolewa kwa kikundi cha mkusanyaji wa GCC 13

Baada ya mwaka wa maendeleo, kutolewa kwa safu ya mkusanyaji ya GCC 13.1 bila malipo imetolewa, toleo la kwanza muhimu katika tawi jipya la GCC 13.x. Chini ya mpango mpya wa kuorodhesha toleo, toleo la 13.0 lilitumika wakati wa utayarishaji, na muda mfupi kabla ya kutolewa kwa GCC 13.1, tawi la GCC 14.0 lilikuwa tayari limegawanyika, ambapo toleo la pili muhimu la GCC 14.1 litaundwa.

Mabadiliko kuu:

  • GCC ilipitisha mtazamo wa mbele wa programu za ujenzi katika lugha ya programu ya Modula-2. Inaauni msimbo wa ujenzi unaoafikiana na lahaja za PIM2, PIM3, na PIM4, pamoja na kiwango cha ISO kinachokubalika cha lugha hiyo.
  • Sehemu ya mbele ya utekelezaji wa mkusanyiko wa lugha ya Rust iliyoandaliwa na mradi wa gccrs (GCC Rust) imeongezwa kwenye mti chanzo wa GCC. Katika mwonekano wa sasa, forntend imewekwa alama kama ya majaribio na imezimwa kwa chaguomsingi. Sehemu ya mbele inapokuwa tayari (inatarajiwa katika toleo lijalo), zana ya kawaida ya zana ya GCC inaweza kutumika kukusanya programu za Rust bila hitaji la kusakinisha kikusanya rustc kilichojengwa kwa kutumia maendeleo ya LLVM.
  • Uboreshaji wa Kiungo-katika-Hatua (LTO) huongeza usaidizi kwa seva ya kazi (jobserver) inayodumishwa na mradi wa GNU make ili kuboresha utekelezaji wa usanifu sambamba kwenye nyuzi nyingi. Katika GCC, seva ya kazi inatumika kusawazisha kazi wakati wa uboreshaji wa LTO katika muktadha wa programu nzima (WPA, Uchambuzi wa Mpango Mzima). Mabomba yaliyopewa jina (--jobserver-style=fifo) hutumiwa kwa chaguo-msingi kuingiliana na seva ya kazi.
  • Kichanganuzi tuli (-fanalyzer) hutoa ukaguzi mpya 20 wa utambuzi, ikijumuisha "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -recursion" -Wanalyzer-rump-through-null", "-Wanalyzer-va-list-leak".
  • Uwezo wa kutoa uchunguzi katika umbizo la SARIF kulingana na JSON umetekelezwa. Umbizo jipya linaweza kutumika kupata matokeo ya uchanganuzi tuli (GCC -fanalyzer), na pia kupata taarifa kuhusu maonyo na makosa. Kuwasha kunafanywa kwa chaguo "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", ambapo chaguo zilizo na "json" husababisha towe katika lahaja mahususi ya GCC ya umbizo la JSON. .
  • Imetekeleza baadhi ya vipengele vilivyoainishwa katika kiwango cha C23 C, kama vile nullptr constant kwa ajili ya kufafanua viashiria visivyofaa, na kuifanya iwe rahisi kutumia orodha zilizo na idadi tofauti ya hoja (variadic), kupanua uwezo wa enums, sifa ya noreturn, kuruhusu matumizi ya constexpr na otomatiki wakati wa kufafanua vipengee, aina na typeof_unqual, manenomsingi mapya alignas, alignof, bool, uongo, tuli_assert, thread_local na kweli, ruhusu mabano tupu wakati wa uanzishaji.
  • Imetekeleza baadhi ya vipengele vilivyobainishwa katika kiwango cha C++23, kama vile uwezo wa kuweka alama mwishoni mwa vielezi changamani, uoanifu na aina ya char8_t, maagizo ya #onyo ya kichakataji awali, iliyopunguzwa na (\u{}, \o{} , \x{}), na kupewa jina ('\N{LATIN CAPITAL LETTER A}') mifuatano ya kuepuka, opereta tuli(), opereta tuli[], opereta wa usawa ndani ya vielezi, isipokuwa vizuizi vingine vya matumizi ya constexpr, usaidizi. kwa UTF-8 katika maandishi chanzo.
  • Usaidizi ulioboreshwa wa majaribio kwa viwango vya C++20 na C++23 katika libstdc++, kama vile kuongeza usaidizi wa faili ya kichwa. na std::format, uwezo wa faili wa kichwa uliopanuliwa , aina za sehemu za ziada zinazoelea zimeongezwa, faili za kichwa zimetekelezwa Na .
  • Imeongeza sifa mpya za utendakazi kwenye hati ambayo kielezi cha faili kinapitishwa kwa kigezo kamili: "__attribute__(((fd_arg(N))))", "__attribute__((fd_arg_read(N))))", na "__attribute__((fd_arg_write(N)) )). Sifa zilizobainishwa zinaweza kutumika katika kichanganuzi tuli (-fanalyzer) ili kugundua kazi isiyo sahihi na vielezi vya faili.
  • Sifa mpya "__attribute__((assume(EXPR))))" imeongezwa, ambayo unaweza kumwambia mkusanyaji kuwa usemi huo ni kweli na mkusanyaji anaweza kutumia ukweli huu bila kutathmini usemi huo.
  • Imeongeza "-fstrict-flex-arrays=[level]" bendera ili kuchagua tabia wakati wa kuchakata kipengele cha safu inayoweza kunyumbulika katika miundo (Flexible Array Members, safu ya ukubwa usiojulikana mwishoni mwa muundo, kwa mfano, "int b[] ").
  • Imeongeza alama ya "-Wenum-int-mismatch" ili kutoa maonyo ikiwa kuna kutolingana kati ya aina iliyoorodheshwa na aina kamili.
  • Mbele ya Fortran ina msaada kamili wa kukamilishwa.
  • Usaidizi wa vitendaji na aina za jumla (jeneric) umeongezwa kwenye sehemu ya mbele ya lugha ya Go, na uoanifu na vifurushi vya lugha ya Go 1.18 umehakikishwa.
  • AArch64 backend inasaidia CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3), na Arm Neoverse V2 (neoverse -v2) . Usaidizi wa hoja za "armv9.1-a", "armv9.2-a", na "armv9.3-a" umeongezwa kwenye chaguo la "-march=". Usaidizi umeongezwa kwa viendelezi vya kichakataji FEAT_LRCPC, FEAT_CSSC na FEAT_LSE2.
  • Usaidizi wa STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c), na Arm Cortex-M85 (cortex-m85) CPUs umeongezwa kwenye mandharinyuma ya usanifu wa ARM.
  • Usaidizi kwa vichakataji vya Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, na AMD Zen 86 (znver4) umeongezwa kwenye sehemu ya nyuma ya x4. Upanuzi wa usanifu wa seti ya maagizo ya AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT, na AMX-COMPLEX iliyopendekezwa katika wasindikaji wa Intel imetekelezwa. Kwa C na C++ kwenye mifumo iliyo na SSE2, aina ya __bf16 imetolewa.
  • Mwisho wa kutengeneza msimbo wa AMD Radeon GPUs (GCN) hutekeleza uwezo wa kutumia vichapuzi vya AMD Instinct MI200 ili kuboresha utendaji wa OpenMP/OpenACC. Uboreshaji wa vekta kwa kutumia maagizo ya SIMD.
  • Uwezo wa mandharinyuma uliopanuliwa kwa kiasi kikubwa kwa jukwaa la LoongArch.
  • Usaidizi ulioongezwa kwa XuanTie C906 ya CPU T-Head (kichwa-c906) katika mazingira ya nyuma ya RISC-V. Usaidizi uliotekelezwa kwa vidhibiti vya vekta vilivyofafanuliwa katika vipimo vya 0.11 vya Upanuzi wa Vekta ya Ndani ya RISC-V. Usaidizi umeongezwa kwa viendelezi 30 vya vipimo vya RISC-V.
  • Wakati wa kuzalisha vitu vilivyoshirikiwa kwa chaguo la "-iliyoshirikiwa", msimbo wa kuanzisha hauongezwe tena baada ya kuongeza mazingira ya sehemu ya kuelea ikiwa uboreshaji wa "-Ofast", "-ffast-math", au "-funsafe-math-optimizations" umewashwa. .
  • Usaidizi wa umbizo la utatuzi wa DWARF unatekelezwa katika karibu usanidi wote.
  • Imeongeza chaguo la "-gz=zstd" ili kubana maelezo ya utatuzi kwa kutumia algoriti ya Zstandard. Imeondoa usaidizi kwa modi ya kubana habari ya utatuzi iliyoacha kutumika "-gz=zlib-gnu".
  • Usaidizi wa awali wa OpenMP 5.2 (Open Multi-Processing) umeongezwa na utekelezaji wa viwango vya OpenMP 5.0 na 5.1 umeendelea, kufafanua API na mbinu za kutumia mbinu za programu sambamba kwenye mifumo ya msingi na mseto (CPU + GPU / DSP) na kumbukumbu za pamoja na vitengo vya vectorization (SIMD).
  • Usaidizi wa umbizo la uhifadhi wa taarifa za utatuzi "STABS" (umewezeshwa na -gstabs na -gxcoff chaguzi), iliyoundwa katika miaka ya 1980 na kutumika katika kitatuzi cha dbx, umekatishwa.
  • Usaidizi ulioacha kutumika kwa Solaris 11.3 (msimbo wa kutumia mfumo huu utaondolewa katika toleo la baadaye).

Chanzo: opennet.ru

Kuongeza maoni