Pagkahuman sa usa ka tuig nga pag-uswag, gipagawas ang libre nga GCC 11.1 compiler suite, ang una nga hinungdanon nga pagpagawas sa bag-ong sanga sa GCC 11.x. Ubos sa bag-ong iskema sa pag-numero sa pagpagawas, ang bersyon 11.0 gigamit sa panahon sa pag-uswag, ug sa wala pa ang pagpagawas sa GCC 11.1, ang sanga sa GCC 12.0 na-forked na, diin ang sunod nga hinungdanon nga pagpagawas sa GCC 12.1 maporma.
Nailhan ang GCC 11.1 sa iyang transisyon sa paggamit sa DWARF 5 debug file format sa default, ang default nga paglakip sa C++17 standard (“-std=gnu++17”), mahinungdanong mga kalamboan sa suporta para sa C++20 standard, eksperimento nga suporta alang sa C++23, mga kalamboan nga may kalabutan sa umaabot nga C language standard (C2x), bag-ong performance optimizations.
Panguna nga mga pagbag-o:
- Ang default mode para sa C++ nga lengguwahe gibalhin aron gamiton ang C++17 standard (-std=gnu++17) imbes sa nauna nga gitanyag nga C++14. Posible nga pilion ang pag-disable sa bag-ong C++ 17 nga pamatasan sa pagproseso sa mga templates nga naggamit sa ubang mga templates isip parameter (-fno-new-ttp-matching).
- Gidugang nga suporta alang sa pagpadali sa hardware sa tool nga AddressSanitizer, nga nagtugot kanimo nga mahibal-an ang mga kamatuoran sa pag-access sa mga lugar nga gilibre nga memorya, lapas sa mga utlanan sa gigahin nga buffer, ug uban pang mga lahi sa mga sayup kung nagtrabaho gamit ang memorya. Ang pagpatulin sa hardware sa pagkakaron anaa lamang alang sa arkitektura sa AArch64 ug naka-focus sa paggamit sa pag-compile sa Linux kernel. Aron mahimo ang AddressSanitizer hardware acceleration sa paghimo sa user space component, ang bandila "-fsanitize=hwaddress" gidugang, ug ang kernel flag "-fsanitize=kernel-hwaddress".
- Kung nagmugna og impormasyon sa pag-debug, ang DWARF 5 nga format gigamit sa default, nga, kon itandi sa nangaging mga bersyon, nagtugot sa pagmugna og 25% nga mas compact debugging data. Ang bug-os nga suporta para sa DWARF 5 nagkinahanglan ug binutils nga bersyon 2.35.2. Ang format sa DWARF 5 gisuportahan sa mga himan sa pag-debug sukad sa GDB 8.0, valgrind 3.17.0, elfutils 0.172 ug dwz 0.14. Aron makamugna og mga debug file gamit ang ubang mga bersyon sa DWARF, mahimo nimong gamiton ang mga opsyon nga "-gdwarf-2", "-gdwarf-3" ug "-gdwarf-4".
- Ang mga kinahanglanon alang sa mga compiler nga magamit sa pagtukod sa GCC nadugangan. Ang compiler kinahanglan na nga mosuporta sa C++11 standard (kaniadto C++98 gikinahanglan), i.e. Kung ang GCC 10 igo na aron matukod ang GCC 3.4, nan labing menos GCC 11 ang gikinahanglan karon aron matukod ang GCC 4.8.
- Ang ngalan ug lokasyon sa mga file para sa pagtipig sa mga dump, temporaryo nga mga file ug dugang nga impormasyon nga gikinahanglan alang sa LTO optimization nausab. Ang ingon nga mga file karon kanunay nga gitipig sa karon nga direktoryo gawas kung ang agianan klaro nga giusab pinaagi sa "-dumpbase", "-dumpdir" ug "-save-temps=*" nga mga kapilian.
- Ang suporta para sa binary nga format nga BRIG para gamiton sa HSAIL (Heterogenous System Architecture Intermediate Language) nga lengguwahe wala na gigamit ug sa dili madugay tangtangon.
- Ang mga kapabilidad sa ThreadSanitizer mode (-fsanitize=thread) gipalapdan, gidesinyo aron mahibal-an ang mga kondisyon sa lumba kung magpaambit sa parehas nga datos gikan sa lainlaing mga thread sa usa ka multi-threaded nga aplikasyon. Ang bag-ong pagpagawas nagdugang suporta alang sa alternatibong mga runtime ug mga palibot, ingon man suporta alang sa KCSAN (Kernel Concurrency Sanitizer) nga himan sa pag-debug, nga gidisenyo aron dinamikong makamatikod sa mga kondisyon sa lumba sulod sa Linux kernel. Gidugang ang bag-ong mga kapilian nga "-param tsan-distinguish-volatile" ug "-param tsan-instrument-func-entry-exit".
- Ang mga numero sa kolum sa diagnostic nga mga mensahe karon nagpakita dili sa byte count gikan sa sinugdanan sa linya, apan sa tinuod ang mga numero sa kolum nga nag-isip sa multi-byte nga mga karakter ug mga karakter nga nag-okupar sa daghang mga posisyon sa linya (pananglitan, ang karakter 🙂 nag-okupar sa duha ka posisyon ug gi-encode sa 4 bytes). Ingon usab, ang mga karakter sa tab gitratar karon ingon usa ka piho nga gidaghanon sa mga wanang (ma-configure pinaagi sa kapilian nga -ftabstop, default 8). Aron mapasig-uli ang daan nga pamatasan, gisugyot ang kapilian nga "-fdiagnostics-column-unit=byte", ug aron mahibal-an ang inisyal nga kantidad (pag-numero gikan sa 0 o 1) - ang kapilian nga "-fdiagnostics-column-origin=".
- Giisip sa vectorizer ang tibuok nga mga sulod sa function ug gidugang ang mga kapabilidad sa pagproseso nga may kalabutan sa mga intersection ug mga reference sa miaging mga bloke sa control-flow graph (CFG, control-flow graph).
- Ang optimizer nagpatuman sa abilidad sa pag-convert sa usa ka serye sa mga kondisyon nga operasyon nga nagtandi sa sama nga variable ngadto sa usa ka switch expression. Ang ekspresyon sa switch mahimong ma-encode sa ulahi gamit ang mga panudlo sa pagsulay sa bit (ang kapilian nga "-fbit-tests" gidugang aron makontrol ang ingon nga pagkakabig).
- Gipauswag nga interprocedural optimizations. Gidugang ang usa ka bag-ong IPA-modref pass (-fipa-modref) aron masubay ang mga side effect sa pagtawag sa mga function ug pagpalambo sa katukma sa pagtuki. Gipauswag nga pagpatuman sa IPA-ICF pass (-fipa-icf), nga nagpamenos sa konsumo sa panumduman sa panahon sa pag-compile ug nagdugang sa gidaghanon sa hiniusa nga mga gimbuhaton diin ang parehas nga mga bloke sa code gihiusa. Sa pass sa IPA-CP (Interprocedural constant propagation), ang prediction heuristics gipauswag, nga gikonsiderar ang nahibal-an nga mga utlanan ug mga bahin sa mga loop.
- Sa Linking Time Optimizations (LTO), ang format sa bytecode gi-optimize aron makunhuran ang gidak-on ug mapaayo ang katulin sa pagproseso. Ang pagkunhod sa peak memory consumption sa panahon sa binding phase.
- Sa mekanismo sa pag-optimize base sa mga resulta sa code profiling (PGO - Profile-guided optimization), nga nagtugot sa pagmugna og mas maayo nga code base sa pag-analisar sa mga feature sa execution, ang gidak-on sa mga file nga adunay GCOV data gipakunhod tungod sa mas compact packaging sa zero counters . Gipauswag nga "-fprofile-values" mode pinaagi sa pagsubay sa daghang mga parameter sa dili direkta nga mga tawag.
- Ang pagpatuman sa OpenMP 5.0 (Open Multi-Processing) nga sumbanan, nga naghubit sa API ug mga pamaagi sa pagpadapat sa parallel nga mga pamaagi sa programming sa multi-core ug hybrid (CPU+GPU/DSP) nga mga sistema nga adunay shared memory ug vectorization units (SIMD), adunay nagpadayon. Gidugang ang inisyal nga suporta alang sa paggahin nga direktiba ug ang abilidad sa paggamit sa mga heterogeneous loops sa OpenMP constructs. Gipatuman nga suporta alang sa OMP_TARGET_OFFLOAD nga variable sa palibot.
- Ang pagpatuman sa OpenACC 2.6 parallel programming specification nga gihatag alang sa C, C ++ ug Fortran nga mga pinulongan gipauswag, nga naghubit sa mga himan alang sa offloading nga mga operasyon sa mga GPU ug mga espesyal nga processor, sama sa NVIDIA PTX.
- Alang sa C nga mga pinulongan, usa ka bag-ong hiyas nga "no_stack_protector" ang gipatuman, nga gidesinyo aron markahan ang mga gimbuhaton diin ang stack protection dili kinahanglan nga mahimo ("-fstack-protector"). Ang hiyas nga "malloc" gipalapdan aron suportahan ang pag-ila sa mga pares sa mga tawag alang sa paggahin ug pagpalingkawas sa memorya (allocator/deallocator), nga gigamit sa static analyzer aron mahibal-an ang kasagaran nga mga sayup sa pagtrabaho uban ang memorya (mga pagtulo sa memorya, paggamit human sa pagpalingkawas, doble nga tawag sa libre nga function, ug uban pa) ug sa mga pasidaan sa compiler nga "-Wmismatched-dealloc", "-Wmismatched-new-delete" ug "-Wfree-nonheap-object", nga nagpahibalo mahitungod sa pagkasumpaki tali sa memory deallocation ug memory allocation operations.
- Bag-ong mga pasidaan gidugang alang sa C nga pinulongan:
- "-Wmismatched-dealloc" (gipaandar pinaagi sa default) - nagpasidaan bahin sa mga operasyon sa deallocation sa memorya nga naggamit sa usa ka pointer nga dili tugma sa mga function sa alokasyon sa memorya.
- "-Wsizeof-array-div" (enable kung "-Wall" is specificed) - Nagpasidaan bahin sa pagbahin sa duha ka gidak-on sa mga operators kung ang divisor dili motakdo sa gidak-on sa array element.
- "-Wstringop-overread" (enabled by default) - nagpasidaan mahitungod sa pagtawag sa usa ka string function nga nagbasa sa datos gikan sa usa ka lugar gawas sa array boundary.
- "-Wtsan" (enabled by default) - Nagpasidaan bahin sa paggamit sa mga feature (sama sa std::atomic_thread_fence) nga wala gisuportahan sa ThreadSanitizer.
- Ang "-Warray-parameter" ug "-Wvla-parameter" (gipaandar kung gipiho ang "-Wall") - nagpasidaan bahin sa nag-overriding nga mga gimbuhaton nga adunay dili magkatugma nga mga deklarasyon sa mga argumento nga adunay kalabotan sa fixed- ug variable-length arrays.
- Ang "-Wuninitialized" nga pasidaan karon nakamatikod sa mga pagsulay sa pagbasa gikan sa uninitialized dynamically allocated memory.
- Ang pahimangno nga "-Wfree-nonheap-object" nagpalapad sa kahulugan sa mga kaso diin ang mga function sa deallocation sa memorya gitawag nga adunay usa ka pointer nga wala makuha pinaagi sa dinamikong memory allocation function.
- Ang "-Wmaybe-uninitialized" nga pasidaan nagpalapad sa pag-ila sa pagpasa sa mga pointer ngadto sa mga gimbuhaton nga nagtumong sa wala'y nahibal-an nga mga lokasyon sa memorya.
- Alang sa C nga pinulongan, usa ka bahin sa mga bag-ong feature nga naugmad sulod sa gambalay sa C2X standard ang gipatuman (gipaandar pinaagi sa pagpiho -std=c2x ug -std=gnu2x): macros BOOL_MAX ug BOOL_WIDTH, opsyonal nga indikasyon sa mga ngalan sa wala magamit nga mga parameter sa function mga depinisyon (sama sa C++), attribute “[ [nodiscard]]", preprocessor operator "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC___, INFINITI_NAN, INFINITY SNAN, DEC_INFINITY ug D EC_NAN, NaN=macros para sa FloatN, _FloatNx ug _DecimalN, abilidad sa pagtino sa mga marka sa paglukso sa wala pa ang mga deklarasyon ug sa katapusan sa compound nga mga pahayag.
- Alang sa C ++, usa ka bahin sa mga pagbag-o ug mga inobasyon nga gisugyot sa C ++ 20 nga sumbanan ang gipatuman, lakip ang mga virtual function nga "consteval virtual", pseudo-destructors alang sa katapusan sa siklo sa kinabuhi sa mga butang, ang paggamit sa klase sa enum ug pagkalkulo sa gidak-on sa usa ka laray sa "bag-o" nga ekspresyon.
- Para sa C++, gidugang ang eksperimento nga suporta alang sa pipila ka mga kalamboan nga gihimo para sa umaabot nga C++23 standard (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). Pananglitan, aduna nay suporta alang sa literal nga suffix nga "zu" alang sa gipirmahan nga size_t values.
- Ang libstdc ++ mipauswag sa suporta alang sa C++ 17 nga sumbanan, lakip ang pagpaila sa std::from_chars ug std::to_chars nga mga pagpatuman alang sa mga floating point type. Bag-ong mga elemento sa C ++ 20 nga sumbanan gipatuman, lakip ang std :: bit_cast, std :: source_location, atomic operations naghulat ug nagpahibalo, , , , , ingon man mga elemento sa umaabot nga C++23 nga sumbanan (std::to_underlying, std::is_scoped_enum). Gidugang nga suporta sa eksperimento para sa mga tipo para sa parallel data processing (SIMD, Data-Parallel Types). Ang pagpatuman sa std::uniform_int_distribution gipaspasan.
- Gikuha ang alpha nga kalidad nga bandila gikan sa libgccjit, usa ka gipaambit nga librarya alang sa pag-embed sa usa ka code generator ngadto sa ubang mga proseso ug paggamit niini aron maorganisar ang JIT nga paghugpong sa bytecode ngadto sa machine code. Gidugang ang abilidad sa paghimo sa libgccjit alang sa MinGW.
- Gidugang nga suporta alang sa AArch64 Armv8-R nga arkitektura (-march=armv8-r). Alang sa AArch64 ug ARM nga mga arkitektura, ang suporta alang sa mga processor gidugang (parameter -mcpu ug -mtune): Arm Cortex-A78 (cortex-a78), Arm Cortex-A78AE (cortex-a78ae), Arm Cortex-A78C (cortex-a78c) , Arm Cortex- X1 (cortex-x1), Arm Neoverse V1 (neoverse-v1) ug Arm Neoverse N2 (neoverse-n2). Ang Fujitsu A64FX (a64fx) ug Arm Cortex-R82 (cortex-r82) nga mga CPU gidugang usab, nga nagsuporta lamang sa AArch64 nga arkitektura.
- Gidugang nga suporta alang sa paggamit sa Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) ug MVE (AArch32 M-profile) nga mga instruksiyon sa SIMD aron i-autovectorize ang mga operasyon nga nagpahigayon sa pagdugang, pagkunhod, pagpadaghan ug mga variant sa pagdugang/pag-ubos. komplikado nga mga numero. Gidugang ang inisyal nga suporta alang sa autovectorization alang sa ARM gamit ang set sa panudlo sa MVE.
- Para sa mga platform sa ARM, usa ka bug-os nga set sa compiler-integrated C functions (Intrinsics) ang gihatag, gipulihan sa extended vector instructions (SIMD), nga naglangkob sa tanang NEON nga instruksiyon nga nadokumento sa ACLE Q3 2020 specification.
- Ang suporta para sa gfx908 GPU gidugang sa backend para sa paghimo og code para sa AMD GPUs base sa GCN microarchitecture.
- Gidugang nga suporta alang sa bag-ong mga processor ug bag-ong mga extension sa set sa panudlo nga gipatuman sa kanila:
- Intel Sapphire Rapids (-march=sapphirerapids, makapahimo sa suporta alang sa MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-INT8, ANIMX-BF-16 ug ANIMX-BFVN
- Intel Alderlake (-march=alderlake, makahimo sa suporta alang sa CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI ug HRESET instruksyon).
- Intel Rocketlake (-march=rocketlake, susama sa Rocket Lake nga walay suporta sa SGX).
- AMD Zen 3 (-march=znver3).
- Para sa mga sistema sa IA-32/x86-64 nga gibase sa mga Intel processor, suporta para sa bag-ong mga instruksiyon sa processor TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI gidugang.
- Gidugang nga suporta alang sa "-march=x86-64-v[234]" nga mga bandila aron mapili ang x86-64 nga lebel sa arkitektura (v2 - naglangkob sa SSE4.2, SSSE3, POPCNT ug CMPXCHG16B nga mga extension; v3 - AVX2 ug MOVBE; v4 - AVX-512 .
- Gidugang nga suporta alang sa mga sistema sa RISC-V nga adunay order nga big-endian byte. Gidugang ang "-misa-spec=*" nga kapilian aron mapili ang bersyon sa RISC-V nga instruksiyon sa set nga detalye sa arkitektura. Gidugang nga suporta alang sa AddressSanitizer ug proteksyon sa stack gamit ang mga tag sa canary.
- Ang padayon nga pag-uswag sa "-fanalyzer" static analysis mode, nga naghimo sa resource-intensive interprocedural analysis sa code execution paths ug data flows sa programa. Ang mode makahimo sa pag-ila sa mga problema sa yugto sa pag-compile, sama sa doble nga tawag sa libre () nga function alang sa usa ka lugar sa panumduman, file descriptor leaks, dereferencing ug pagpasa sa mga null pointer, pag-access sa gipagawas nga mga bloke sa panumduman, gamit ang wala’y una nga mga kantidad, ug uban pa. Sa bag-ong bersyon:
- Ang code alang sa pagsubay sa kahimtang sa programa hingpit nga gisulat pag-usab. Nasulbad na ang mga problema sa pag-scan sa dako kaayong C files.
- Gidugang ang inisyal nga suporta sa C++.
- Ang alokasyon sa memorya ug pagtuki sa deallocation gikuha gikan sa piho nga malloc ug libre nga mga gimbuhaton, ug karon nagsuporta sa bag-o/pagtangtang ug bag-o []/pagtangtang [].
- Gidugang bag-ong mga pasidaan: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-write-to-const ug -Wanalyzer-write-to-string-literal.
- Gidugang ang bag-ong mga kapilian sa pag-debug -fdump-analyzer-json ug -fno-analyzer-feasibility.
- Ang abilidad sa pagpalapad sa analisador pinaagi sa mga plugins para sa GCC gipatuman (pananglitan, usa ka plugin ang giandam sa pagsusi sa sayop nga paggamit sa global locking (GIL) sa CPython).
Source: opennet.ru
