Paglabas ng GCC 13 compiler suite

Pagkatapos ng isang taon ng pag-unlad, inilabas ang libreng GCC 13.1 compiler suite, ang unang makabuluhang release sa bagong sangay ng GCC 13.x. Sa ilalim ng bagong release numbering scheme, ang bersyon 13.0 ay ginamit sa panahon ng pag-develop, at ilang sandali bago ang release ng GCC 13.1, ang GCC 14.0 branch ay na-forked na, kung saan ang susunod na makabuluhang release ng GCC 14.1 ay bubuo.

Pangunahing pagbabago:

  • Ang GCC ay nagpatibay ng isang frontend para sa pagbuo ng mga programa sa Modula-2 programming language. Sinusuportahan nito ang building code na tumutugma sa PIM2, PIM3, at PIM4 na dialect, pati na rin ang tinatanggap na ISO standard para sa wikang iyon.
  • Isang frontend na may pagpapatupad ng Rust language compiler na inihanda ng gccrs project (GCC Rust) ay naidagdag sa GCC source tree. Sa kasalukuyang view, ang forntend ay minarkahan bilang eksperimental at hindi pinagana bilang default. Kapag handa na ang frontend (inaasahan sa susunod na release), ang karaniwang toolkit ng GCC ay maaaring gamitin upang i-compile ang mga programang Rust nang hindi na kailangang i-install ang rustc compiler na binuo gamit ang mga pagpapaunlad ng LLVM.
  • Ang Link-in-Step Optimization (LTO) ay nagdaragdag ng suporta para sa isang server ng trabaho (jobserver) na pinapanatili ng proyekto ng GNU make para i-optimize ang parallel build execution sa maraming thread. Sa GCC, ginagamit ang jobserver para iparallelize ang trabaho sa panahon ng LTO optimization sa konteksto ng buong programa (WPA, Whole-program Analysis). Ang mga pinangalanang pipe (--jobserver-style=fifo) ay ginagamit bilang default upang makipag-ugnayan sa jobserver.
  • Ang static analyzer (-fanalyzer) ay nag-aalok ng 20 bagong diagnostic check, kabilang ang "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Naipatupad na ang kakayahang mag-output ng mga diagnostic sa SARIF na format batay sa JSON. Maaaring gamitin ang bagong format para makakuha ng mga static na resulta ng pagsusuri (GCC -fanalyzer), gayundin para makakuha ng impormasyon tungkol sa mga babala at error. Ginagawa ang pagpapagana gamit ang opsyong "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", kung saan ang mga opsyon na may "json" ay nagreresulta sa output sa isang variant na partikular sa GCC ng JSON na format .
  • Ipinatupad ang ilang mga tampok na tinukoy sa pamantayan ng C23 C, tulad ng nullptr constant para sa pagtukoy ng mga null pointer, na ginagawang mas madaling gamitin ang mga listahan na may variable na bilang ng mga argumento (variadic), pagpapalawak ng mga kakayahan ng enums, ang noreturn attribute, na nagpapahintulot sa paggamit ng constexpr at auto kapag tinutukoy ang mga bagay, ang uri at uri ng_di-katumbas, mga bagong keyword na alignas, alignof, bool, false, static_assert, thread_local at true, pinapayagan ang mga walang laman na panaklong sa pagsisimula.
  • Ipinatupad ang ilang tampok na tinukoy sa pamantayan ng C++23, tulad ng kakayahang maglagay ng mga marka sa dulo ng mga compound expression, pagiging tugma sa uri ng char8_t, ang #warning preprocessor na direktiba, na nililimitahan ng (\u{}, \o{} , \x{}), at pinangalanang ('\N{LATIN CAPITAL LETTER A}') mga escape sequence, static operator(), static operator[], equality operator sa loob ng mga expression, maliban sa ilang mga paghihigpit sa paggamit ng constexpr, suporta para sa UTF-8 sa mga pinagmulang teksto.
  • Pinahusay ng libstdc++ ang pang-eksperimentong suporta para sa mga pamantayang C++20 at C++23, gaya ng pagdaragdag ng suporta sa header file at std::format, pinalawig na mga kakayahan ng file ng header , idinagdag ang mga karagdagang uri ng floating point, ipinatupad ang mga file ng header At .
  • Nagdagdag ng mga bagong katangian ng function sa dokumento na ang isang file descriptor ay ipinasa sa isang integer variable: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))", at "__attribute__((fd_arg_write(N)) )) ". Ang mga tinukoy na katangian ay maaaring gamitin sa isang static na analyzer (-fanalyzer) para makita ang maling gawain sa mga file descriptor.
  • Ang isang bagong attribute na "__attribute__((assume(EXPR)))" ay naidagdag, kung saan masasabi mo sa compiler na totoo ang expression at magagamit ng compiler ang katotohanang ito nang hindi sinusuri ang expression.
  • Idinagdag ang flag na "-fstrict-flex-arrays=[level]" upang pumili ng gawi kapag nagpoproseso ng flexible na elemento ng array sa mga istruktura (Mga Miyembro ng Flexible Array, isang hanay ng hindi tiyak na laki sa dulo ng istraktura, halimbawa, "int b[] ").
  • Idinagdag ang flag na "-Wenum-int-mismatch" upang magbigay ng mga babala kung mayroong hindi tugma sa pagitan ng isang enumerated na uri at isang uri ng integer.
  • Ang front-end ng Fortran ay may buong suporta para sa pagwawakas.
  • Ang suporta para sa mga generic na function at uri (generics) ay idinagdag sa front end para sa Go language, at natiyak ang compatibility sa mga package para sa Go 1.18 language.
  • Sinusuportahan ng AArch64 backend ang CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3), at Arm Neoverse V2 (neoverse -v2) . Ang suporta para sa mga argumentong "armv9.1-a", "armv9.2-a", at "armv9.3-a" ay naidagdag sa opsyong "-march=". Nagdagdag ng suporta para sa FEAT_LRCPC, FEAT_CSSC at FEAT_LSE2 na mga extension ng processor.
  • Ang suporta para sa STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c), at Arm Cortex-M85 (cortex-m85) na mga CPU ay idinagdag sa ARM architecture backend.
  • Ang suporta para sa Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, at AMD Zen 86 (znver4) na mga processor ay idinagdag sa x4 backend. Ang AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT, at AMX-COMPLEX instruction set architecture extension na iminungkahi sa mga processor ng Intel ay ipinatupad. Para sa C at C++ sa mga system na may SSE2, ang uri ng __bf16 ay ibinigay.
  • Ang code generation backend para sa AMD Radeon GPUs (GCN) ay nagpapatupad ng kakayahang gumamit ng AMD Instinct MI200 accelerators upang mapabuti ang OpenMP/OpenACC performance. Pinahusay na vectorization gamit ang mga tagubilin sa SIMD.
  • Makabuluhang pinalawak na mga kakayahan sa backend para sa LoongArch platform.
  • Nagdagdag ng suporta para sa XuanTie C906 (thead-c906) ng CPU T-Head sa backend ng RISC-V. Ipinatupad ang suporta para sa mga vector handler na tinukoy sa RISC-V Vector Extension Intrinsic 0.11 na detalye. Nagdagdag ng suporta para sa 30 extension ng detalye ng RISC-V.
  • Kapag bumubuo ng mga nakabahaging bagay gamit ang opsyong "-shared", hindi na idinaragdag ang startup code pagkatapos magdagdag ng kapaligiran ng floating point kung pinagana ang "-Ofast", "-ffast-math", o "-funsafe-math-optimizations" na mga pag-optimize .
  • Ang suporta para sa format ng pag-debug ng DWARF ay ipinatupad sa halos lahat ng mga pagsasaayos.
  • Idinagdag ang opsyong "-gz=zstd" upang i-compress ang impormasyon sa pag-debug gamit ang Zstandard algorithm. Inalis ang suporta para sa hindi na ginagamit na debug information compression mode "-gz=zlib-gnu".
  • Ang paunang suporta para sa OpenMP 5.2 (Open Multi-Processing) ay idinagdag at ang pagpapatupad ng OpenMP 5.0 at 5.1 na mga pamantayan ay nagpatuloy, na tumutukoy sa mga API at pamamaraan para sa paglalapat ng mga parallel programming method sa multi-core at hybrid (CPU + GPU / DSP) na mga system na may shared memory at vectorization units (SIMD).
  • Hindi na ginagamit na suporta para sa legacy na format ng imbakan ng impormasyon ng STABS debug (na-enable sa mga opsyon na -gstabs at -gxcoff), na ginawa noong 1980s at ginamit sa dbx debugger.
  • Hindi na ginagamit na suporta para sa Solaris 11.3 (ang code para suportahan ang platform na ito ay aalisin sa isang release sa hinaharap).

Pinagmulan: opennet.ru

Magdagdag ng komento