PÄc gada izstrÄdes ir izlaists bezmaksas GCC 11.1 kompilatoru komplekts, kas ir pirmais nozÄ«mÄ«gais laidiens jaunajÄ GCC 11.x atzarÄ. SaskaÅÄ ar jauno laidienu numerÄcijas shÄmu izstrÄdes laikÄ tika izmantota versija 11.0, un Ä«si pirms GCC 11.1 izlaiÅ”anas jau tika izveidots GCC 12.0 atzars, no kura tiks veidots nÄkamais nozÄ«mÄ«gais GCC 12.1 laidiens.
GCC 11.1 ir ievÄrojams ar pÄreju uz DWARF 5 atkļūdoÅ”anas faila formÄta izmantoÅ”anu pÄc noklusÄjuma, standarta C++17 iekļauÅ”anu (ā-std=gnu++17ā), bÅ«tiskiem C++20 atbalsta uzlabojumiem. standarts, eksperimentÄls atbalsts C++23, uzlabojumi saistÄ«bÄ ar topoÅ”o C valodas standartu (C2x), jaunas veiktspÄjas optimizÄcijas.
GalvenÄs izmaiÅas:
- C++ valodas noklusÄjuma režīms ir pÄrslÄgts, lai izmantotu C++17 standartu (-std=gnu++17), nevis iepriekÅ” piedÄvÄto C++14. Ir iespÄjams selektÄ«vi atspÄjot jauno C++17 uzvedÄ«bu, apstrÄdÄjot veidnes, kurÄs kÄ parametrs tiek izmantotas citas veidnes (-fno-new-ttp-matching).
- Pievienots AddressSanitizer rÄ«ka aparatÅ«ras paÄtrinÄjuma atbalsts, kas ļauj noteikt faktus par piekļuvi atbrÄ«votajiem atmiÅas apgabaliem, pÄrsniedzot pieŔķirtÄ bufera robežas, un dažus citus kļūdu veidus, strÄdÄjot ar atmiÅu. AparatÅ«ras paÄtrinÄjums paÅ”laik ir pieejams tikai AArch64 arhitektÅ«rai, un tas ir vÄrsts uz izmantoÅ”anu, kompilÄjot Linux kodolu. Lai iespÄjotu AddressSanitizer aparatÅ«ras paÄtrinÄjumu, veidojot lietotÄja telpas komponentus, ir pievienots karodziÅÅ” "-fsanitize=hwaddress" un kodola karodziÅÅ” "-fsanitize=kernel-hwaddress".
- Ä¢enerÄjot atkļūdoÅ”anas informÄciju, pÄc noklusÄjuma tiek izmantots DWARF 5 formÄts, kas, salÄ«dzinot ar iepriekÅ”ÄjÄm versijÄm, ļauj Ä£enerÄt par 25% kompaktÄkus atkļūdoÅ”anas datus. PilnÄ«gam DWARF 5 atbalstam ir nepiecieÅ”ama vismaz binutils versija 2.35.2. DWARF 5 formÄts tiek atbalstÄ«ts atkļūdoÅ”anas rÄ«kos kopÅ” versijas GDB 8.0, valgrind 3.17.0, elfutils 0.172 un dwz 0.14. Lai Ä£enerÄtu atkļūdoÅ”anas failus, izmantojot citas DWARF versijas, varat izmantot opcijas "-gdwarf-2", "-gdwarf-3" un "-gdwarf-4".
- Ir paaugstinÄtas prasÄ«bas kompilatoriem, kurus var izmantot, lai izveidotu GCC. Tagad kompilatoram jÄatbalsta C++11 standarts (iepriekÅ” bija nepiecieÅ”ams C++98), t.i. Ja GCC 10 izveidei pietika ar GCC 3.4, tad tagad ir nepiecieÅ”ams vismaz GCC 11, lai izveidotu GCC 4.8.
- MainÄ«ts izgÄztuvju, pagaidu failu un LTO optimizÄcijai nepiecieÅ”amÄs papildu informÄcijas saglabÄÅ”anas failu nosaukums un atraÅ”anÄs vieta. Å Ädi faili tagad vienmÄr tiek saglabÄti paÅ”reizÄjÄ direktorijÄ, ja vien ceļŔ nav skaidri mainÄ«ts, izmantojot opcijas "-dumpbase", "-dumpdir" un "-save-temps=*".
- BinÄrÄ formÄta BRIG atbalsts lietoÅ”anai ar HSAIL (neviendabÄ«gÄs sistÄmas arhitektÅ«ras starpvalodas) valodu ir novecojis un drÄ«zumÄ tiks noÅemts.
- Režīma ThreadSanitizer (-fsanitize=thread) iespÄjas ir paplaÅ”inÄtas, lai noteiktu sacensÄ«bu apstÄkļus, koplietojot tos paÅ”us datus no dažÄdiem daudzpavedienu lietojumprogrammas pavedieniem. JaunajÄ laidienÄ ir pievienots atbalsts alternatÄ«viem izpildlaikiem un vidÄm, kÄ arÄ« atbalsts KCSAN (Kernel Concurrency Sanitizer) atkļūdoÅ”anas rÄ«kam, kas paredzÄts, lai dinamiski noteiktu sacensÄ«bu apstÄkļus Linux kodolÄ. Pievienotas jaunas opcijas "-param tsan-distinguish-volatile" un "-param tsan-instrument-func-entry-exit".
- Kolonnu numuri diagnostikas ziÅojumos tagad atspoguļo nevis baitu skaitu no rindas sÄkuma, bet faktiski kolonnu numurus, kas Åem vÄrÄ vairÄku baitu rakstzÄ«mes un rakstzÄ«mes, kas ieÅem vairÄkas pozÄ«cijas rindÄ (piemÄram, rakstzÄ«me š aizÅem divas pozÄ«cijas un ir kodÄts 4 baitos). TÄpat arÄ« tabulÄÅ”anas rakstzÄ«mes tagad tiek uzskatÄ«tas par noteiktu atstarpju skaitu (konfigurÄjama, izmantojot opciju -ftabstop, noklusÄjuma 8). Lai atjaunotu iepriekÅ”Äjo darbÄ«bu, tiek piedÄvÄta opcija ā-fdiagnostics-column-unit=byteā un, lai noteiktu sÄkotnÄjo vÄrtÄ«bu (numurÄÅ”ana no 0 vai 1), - opcija ā-fdiagnostics-column-origin=ā.
- Vektorizators Åem vÄrÄ visu funkcijas saturu un pievieno apstrÄdes iespÄjas, kas saistÄ«tas ar krustojumiem un atsaucÄm uz iepriekÅ”Äjiem blokiem vadÄ«bas plÅ«smas grafikÄ (CFG, kontroles plÅ«smas grafiks).
- OptimizÄtÄjs ievieÅ” iespÄju pÄrvÄrst virkni nosacÄ«jumu operÄciju, kas salÄ«dzina vienu un to paÅ”u mainÄ«go slÄdža izteiksmÄ. NÄkotnÄ slÄdža izteiksmi var kodÄt, izmantojot bitu testÄÅ”anas instrukcijas (lai kontrolÄtu Å”Ädu pÄrveidoÅ”anu, ir pievienota opcija ā-fbit-testsā).
- Uzlabota starpprocedÅ«ru optimizÄcija. Pievienota jauna IPA-modref caurlaide (-fipa-modref), lai izsekotu blakusefektiem, izsaucot funkcijas, un uzlabotu analÄ«zes precizitÄti. Uzlabota IPA-ICF caurlaides (-fipa-icf) ievieÅ”ana, kas samazina atmiÅas patÄriÅu kompilÄcijas laikÄ un palielina vienoto funkciju skaitu, kurÄm tiek apvienoti identiski koda bloki. IPA-CP (Interprocedural konstante izplatÄ«Å”anÄs) pÄrejÄ prognozÄÅ”anas heiristika ir uzlabota, Åemot vÄrÄ zinÄmÄs cilpu robežas un iezÄ«mes.
- SaistÄ«Å”anas laika optimizÄcijÄ (LTO) baitkoda formÄts ir optimizÄts, lai samazinÄtu izmÄru un uzlabotu apstrÄdes Ätrumu. SamazinÄts maksimÄlÄs atmiÅas patÄriÅÅ” saistÄ«Å”anas fÄzÄ.
- OptimizÄcijas mehÄnismÄ, kas balstÄ«ts uz koda profilÄÅ”anas rezultÄtiem (PGO - Profile-guided optimization), kas ļauj Ä£enerÄt optimÄlÄku kodu, pamatojoties uz izpildes pazÄ«mju analÄ«zi, failu izmÄrs ar GCOV datiem tiek samazinÄts, pateicoties kompaktÄkam nulles skaitÄ«tÄju iepakojumam. . Uzlabots "-fprofile-values" režīms, sekojot lÄ«dzi vairÄk parametru netieÅ”ajiem zvaniem.
- OpenMP 5.0 (Open Multi-Processing) standarta ievieÅ”ana, kas definÄ API un metodes paralÄlÄs programmÄÅ”anas metožu pielietoÅ”anai daudzkodolu un hibrÄ«dÄs (CPU+GPU/DSP) sistÄmÄs ar koplietojamo atmiÅu un vektorizÄcijas vienÄ«bÄm (SIMD), ir. turpinÄjÄs. Pievienots sÄkotnÄjais atbalsts pieŔķirÅ”anas direktÄ«vai un iespÄja OpenMP konstrukcijÄs izmantot neviendabÄ«gas cilpas. Ieviests atbalsts vides mainÄ«gajam OMP_TARGET_OFFLOAD.
- Ir uzlabota OpenACC 2.6 paralÄlÄs programmÄÅ”anas specifikÄcijas ievieÅ”ana, kas paredzÄta C, C++ un Fortran valodÄm, kas definÄ rÄ«kus GPU un specializÄto procesoru, piemÄram, NVIDIA PTX, operÄciju izkrauÅ”anai.
- C valodÄm ir ieviests jauns atribÅ«ts āno_stack_protectorā, kas paredzÄts, lai atzÄ«mÄtu funkcijas, kurÄm nevajadzÄtu iespÄjot steka aizsardzÄ«bu (ā-fstack-protectorā). AtribÅ«ts āmallocā ir paplaÅ”inÄts, lai atbalstÄ«tu atmiÅas pieŔķirÅ”anas un atbrÄ«voÅ”anas zvanu pÄru identificÄÅ”anu (alokators/sadalÄ«tÄjs), ko izmanto statiskajÄ analizatorÄ, lai identificÄtu tipiskas kļūdas darbÄ ar atmiÅu (atmiÅas noplÅ«des, izmantoÅ”ana pÄc atbrÄ«voÅ”anas, dubultie izsaukumi uz brÄ«vo funkciju utt.) un kompilatoru brÄ«dinÄjumos ā-Wmismatched-deallocā, ā-Wmismatched-new-deleteā un ā-Wfree-nonheap-objectā, informÄjot par neatbilstÄ«bu starp atmiÅas atdalÄ«Å”anas un atmiÅas pieŔķirÅ”anas darbÄ«bÄm.
- C valodai ir pievienoti jauni brÄ«dinÄjumi:
- "-Wmismatched-dealloc" (iespÄjots pÄc noklusÄjuma) ā brÄ«dina par atmiÅas atdalÄ«Å”anas darbÄ«bÄm, kurÄs tiek izmantots rÄdÄ«tÄjs, kas nav saderÄ«gs ar atmiÅas pieŔķirÅ”anas funkcijÄm.
- "-Wsizeof-array-div" (iespÄjots, ja ir norÄdÄ«ts "-Wall") ā brÄ«dina par divu operatoru izmÄru sadalÄ«Å”anu, ja dalÄ«tÄjs neatbilst masÄ«va elementa izmÄram.
- "-Wstringop-overread" (iespÄjots pÄc noklusÄjuma) - brÄ«dina par virknes funkcijas izsaukÅ”anu, kas nolasa datus no apgabala Ärpus masÄ«va robežas.
- "-Wtsan" (iespÄjots pÄc noklusÄjuma) ā brÄ«dina par tÄdu lÄ«dzekļu (piemÄram, std::atomic_thread_fence) izmantoÅ”anu, kas netiek atbalstÄ«ti programmÄ ThreadSanitizer.
- ā-Warray-parameterā un ā-Wvla-parameterā (iespÄjots, norÄdot ā-Wallā) ā brÄ«dina par funkciju ignorÄÅ”anu ar nesaderÄ«gÄm argumentu deklarÄcijÄm, kas saistÄ«tas ar fiksÄta un mainÄ«ga garuma masÄ«viem.
- BrÄ«dinÄjums "-Wuninitialized" tagad nosaka mÄÄ£inÄjumus lasÄ«t no neinicializÄtas dinamiski pieŔķirtÄs atmiÅas.
- BrÄ«dinÄjums "-Wfree-nonheap-object" paplaÅ”ina to gadÄ«jumu definÄ«ciju, kad atmiÅas atdalÄ«Å”anas funkcijas tiek izsauktas ar rÄdÄ«tÄju, kas nav iegÅ«ts, izmantojot dinamiskÄs atmiÅas pieŔķirÅ”anas funkcijas.
- BrÄ«dinÄjums "-Wmaybe-unitialized" ir paplaÅ”inÄjis norÄdes noteikÅ”anu funkcijÄm, kas attiecas uz neinicializÄtÄm atmiÅas vietÄm.
- C valodai ir ieviesta daļa no jaunÄm funkcijÄm, kas izstrÄdÄtas C2X standarta ietvaros (iespÄjota, norÄdot -std=c2x un -std=gnu2x): makro BOOL_MAX un BOOL_WIDTH, neizmantoto parametru nosaukumu izvÄles norÄde funkcijÄ. definÄ«cijas (kÄ C++), atribÅ«ts "[ [nodiscard]]", priekÅ”apstrÄdÄtÄja operators "__has_c_attribute", makro FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_BBL_60559AN_, IN, XNUMX LDBL_SNAN, DEC_INFINITY un DEC _NAN, NaN = makro FloatN, _FloatNx un _DecimalN, iespÄja norÄdÄ«t lÄciena atzÄ«mes pirms deklarÄcijÄm un salikto priekÅ”rakstu beigÄs.
- AttiecÄ«bÄ uz C++ ir ieviesta daļa no C++20 standartÄ piedÄvÄtajÄm izmaiÅÄm un jauninÄjumiem, tostarp virtuÄlÄs funkcijas āconsteval virtualā, pseidodestruktorus objektu dzÄ«ves cikla beigÄm, enum klases izmantoÅ”anu un masÄ«va lieluma aprÄÄ·inÄÅ”ana ājaunajÄā izteiksmÄ.
- Programmai C++ ir pievienots eksperimentÄls atbalsts dažiem uzlabojumiem, kas tiek izstrÄdÄti nÄkotnes standartam C++23 (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu ++2b). PiemÄram, tagad tiek atbalstÄ«ts burtiskais sufikss āzuā vÄrtÄ«bÄm ar zÄ«mi size_t.
- libstdc++ ir uzlabojis atbalstu C++17 standartam, tostarp ievieÅ”ot std::from_chars un std::to_chars implementÄcijas peldoÅ”Ä komata tipiem. Ieviesti jauni C++20 standarta elementi, tostarp std::bit_cast, std::source_location, atomu darbÄ«bas gaidÄ«Å”ana un paziÅoÅ”ana, , , , , kÄ arÄ« elementi nÄkotnes C++ standarts 23 (std::to_underlying, std::is_scoped_enum). Pievienots eksperimentÄls atbalsts tipiem paralÄlai datu apstrÄdei (SIMD, Data-Parallel Types). Ir paÄtrinÄta std::uniform_int_distribution ievieÅ”ana.
- NoÅemts alfa kvalitÄtes karodziÅÅ” no libgccjit, koplietojamas bibliotÄkas koda Ä£eneratora iegulÅ”anai citos procesos un izmantoÅ”anai, lai organizÄtu baitkoda JIT kompilÄciju maŔīnas kodÄ. Pievienota iespÄja MinGW izveidot libgccjit.
- Pievienots atbalsts AArch64 Armv8-R arhitektÅ«rai (-march=armv8-r). AArch64 un ARM arhitektÅ«rÄm ir pievienots atbalsts procesoriem (parametri -mcpu un -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) un Arm Neoverse N2 (neoverse-n2). Ir pievienoti arÄ« Fujitsu A64FX (a64fx) un Arm Cortex-R82 (cortex-r82) CPU, kas atbalsta tikai AArch64 arhitektÅ«ru.
- Pievienots atbalsts Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) un MVE (AArch32 M-profils) SIMD instrukciju izmantoÅ”anai, lai automÄtiski vektorizÄtu darbÄ«bas, kas veic saskaitÄ«Å”anu, atÅemÅ”anu, reizinÄÅ”anu un saskaitÄ«Å”anas/atÅemÅ”anas variantus. kompleksie skaitļi. Pievienots sÄkotnÄjais atbalsts autovektorizÄcijai ARM, izmantojot MVE instrukciju kopu.
- ARM platformÄm tiek nodroÅ”inÄts pilns kompilatorÄ integrÄtu C funkciju komplekts (Intrinsics), kas aizstÄts ar paplaÅ”inÄtÄm vektoru instrukcijÄm (SIMD), kas aptver visas NEON instrukcijas, kas dokumentÄtas ACLE Q3 2020 specifikÄcijÄ.
- AizmugursistÄmai ir pievienots atbalsts gfx908 GPU, lai Ä£enerÄtu kodu AMD GPU, pamatojoties uz GCN mikroarhitektÅ«ru.
- Pievienots atbalsts jauniem procesoriem un tajos ieviesti jauni instrukciju kopas paplaÅ”inÄjumi:
- Intel Sapphire Rapids (-march=sapphirerapids, nodroÅ”ina atbalstu instrukcijÄm MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMT-TILE, AMX-AVX8, 16NIMX-BFXXNUMX.
- Intel Alderlake (-march=alderlake, nodroÅ”ina atbalstu CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI un HRESET instrukcijÄm).
- Intel Rocketlake (-march=rocketlake, lÄ«dzÄ«gi kÄ Rocket Lake bez SGX atbalsta).
- AMD Zen 3 (-march=znver3).
- SistÄmÄm IA-32/x86-64, kuru pamatÄ ir Intel procesori, ir pievienots atbalsts jaunÄm procesora instrukcijÄm TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI.
- Pievienots atbalsts karodziÅiem "-march=x86-64-v[234]", lai atlasÄ«tu x86-64 arhitektÅ«ras lÄ«meÅus (v2 ā aptver SSE4.2, SSSE3, POPCNT un CMPXCHG16B paplaÅ”inÄjumus; v3 ā AVX2 un MOVBE; v4 ā AVX-512 ) .
- Pievienots atbalsts RISC-V sistÄmÄm ar lielo baitu secÄ«bu. Pievienota opcija "-misa-spec=*", lai atlasÄ«tu RISC-V instrukciju kopas arhitektÅ«ras specifikÄcijas versiju. Pievienots atbalsts AddressSanitizer un kaudzes aizsardzÄ«bai, izmantojot kanÄriju tagus.
- TurpinÄs pilnveidot statiskÄs analÄ«zes režīmu ā-fanalyzerā, kas programmÄ veic resursietilpÄ«gu koda izpildes ceļu un datu plÅ«smu starpprocedÅ«ru analÄ«zi. Režīms spÄj atklÄt problÄmas kompilÄcijas stadijÄ, piemÄram, dubultus izsaukumus uz free() funkciju vienam atmiÅas apgabalam, faila deskriptora noplÅ«des, atsauces atcelÅ”anu un nulles rÄdÄ«tÄju nodoÅ”anu, piekļuvi atbrÄ«votajiem atmiÅas blokiem, neinicializÄtu vÄrtÄ«bu izmantoÅ”anu utt. JaunajÄ versijÄ:
- Programmas stÄvokļa izsekoÅ”anas kods ir pilnÄ«bÄ pÄrrakstÄ«ts. ProblÄmas ar ļoti lielu C failu skenÄÅ”anu ir atrisinÄtas.
- Pievienots sÄkotnÄjais C++ atbalsts.
- AtmiÅas pieŔķirÅ”anas un atdalÄ«Å”anas analÄ«ze ir abstrahÄta no specifiskajÄm malloc un bezmaksas funkcijÄm, un tagad tÄ atbalsta jaunu/dzÄst un jaunu[]/dzÄst[].
- Pievienoti jauni brÄ«dinÄjumi: -Wanalyzer-shift-count-negatÄ«vs, -Wanalyzer-shift-count-overflow, -Wanalyzer-Write-to-const un -Wanalyzer-Write-to-string-literal.
- Pievienotas jaunas atkļūdoÅ”anas opcijas -fdump-analyzer-json un -fno-analyzer-iespÄjams.
- Ir ieviesta iespÄja paplaÅ”inÄt analizatoru, izmantojot GCC spraudÅus (piemÄram, ir sagatavots spraudnis, lai pÄrbaudÄ«tu globÄlÄs bloÄ·ÄÅ”anas (GIL) nepareizu izmantoÅ”anu CPython).
Avots: opennet.ru