Pas një vit zhvillimi, u publikua lëshimi i setit të lirë të kompilatorëve GCC 12.1, një publikim i parë i rëndësishëm në degën e re GCC 12.x. Në përputhje me skemën e re të numrave të publikimeve, versioni 12.0 u përdor gjatë procesit të zhvillimit, dhe pak para publikimit të GCC 12.1, tashmë ishte dega e GCC 13.0, mbi të cilën do të formohet lëshimi tjetër i rëndësishëm GCC 13.1. Më 23 maj, projekti do të festojë 35 vjet nga formimi i publikimit të parë të GCC.
Ndryshimet kryesore:
- U shtua mbështetje për formatin e de_b-debugimit CTF (Compact Type Format), që siguron ruajtjen e kompakt të të dhënave për llojet C, lidhjet ndërmjet funksioneve dhe simbolet e de_b-debugimit. Kur është e integruar në objektet ELF, formati lejon përdorimin e tabelave të simboleve EFL për të shmangur dublikimin e të dhënave.
- U shpall si e vjetruar mbĂ«shtetja pĂ«r formatin e ruajtjes sĂ« informacionit tĂ« de_b-debugimit âSTABSâ, i krijuar nĂ« vitet 1980.
- Punohet pĂ«r tĂ« zgjeruar mbĂ«shtetje pĂ«r standardet e ardhshme C2X dhe C++23 pĂ«r gjuhĂ«t C dhe C++. PĂ«r shembull, u shtua mbĂ«shtetje pĂ«r shprehjen âif constevalâ; u lejua pĂ«rdorimi i auto nĂ« argumentet e funksioneve (âf(auto(g()))â); u lejua pĂ«rdorimi i variableve jo-litereale, goto dhe etiketa nĂ« funksionet e shpallura si constexpr; u shtua mbĂ«shtetje pĂ«r operatorĂ«t ndarĂ«s me indeks shumĂ«-dimensional operator[]; nĂ« if, for dhe switch u zgjeruan mundĂ«sitĂ« e blloqeve tĂ« inicializimit (âfor (using T = int; T e : v)â).
- Në bibliotekën standarde C++, u përmirësua mbështetja për seksionet eksperimentale të standardeve C++20 dhe C++23. U shtua mbështetje për std::move_only_function, <spanstream>, std::basic_string::resize_and_overwrite, <stacktrace>, <stdatomic.h> dhe std::invoke_r. U lejua përdorimi në funksionet constexpr të std::unique_ptr, std::vector, std::basic_string, std::optional dhe std::variant.
- Në frontend për gjuhën Fortran, u ofrua mbështetje e plotë për specifikimin TS 29113, që përshkruan mundësitë e ruajtjes së portueshmërisë midis kodit në gjuhët Fortran dhe C.
- U shtua mbĂ«shtetje pĂ«r zgjerimin __builtin_shufflevector(vec1, vec2, index1, index2, âŠ), tĂ« cilin e kishte shtuar mĂ« parĂ« Clang dhe qĂ« ofron njĂ« thirrje tĂ« vetme pĂ«r tĂ« kryer operacione tĂ« zakonshme tĂ« rregullimit dhe ri-shpĂ«rndarjes sĂ« vektorĂ«ve.
- Duke pĂ«rdorur nivelin e optimizimit â-O2â, automatikisht pĂ«rfshihet pĂ«rdorimi i vektorizimit (janĂ« pĂ«rfshirĂ« modet -ftree-vectorize dhe -fvect-cost-model=very-cheap). Modeli âvery-cheapâ lejon vektorizimin vetĂ«m nĂ«se kodi vektorial mund ta zĂ«vendĂ«sojĂ« plotĂ«sisht kodin skalar tĂ« vektorizuar.
- U shtua moda â-ftrivial-auto-var-initâ qĂ« pĂ«rfshin inicializimin e shprehur tĂ« variablave nĂ« stack pĂ«r tĂ« gjurmuar problemet dhe pĂ«r tĂ« bllokuar ndjeshmĂ«ritĂ« qĂ« lidhen me pĂ«rdorimin e variablave tĂ« pa inicializuar.
- Për gjuhët C dhe C++, u shtua funksioni i integruar __builtin_dynamic_object_size për të përcaktuar madhësinë e objektit, i pajtueshëm me funksionin e ngjashëm nga Clang.
- PĂ«r gjuhĂ«t C dhe C++, u shtua mbĂ«shtetje pĂ«r atributin âunavailableâ (pĂ«r shembull, mund tĂ« shĂ«nohen funksione qĂ« kur pĂ«rpiqen tĂ« pĂ«rdoren do tĂ« japin njĂ« gabim).
- PĂ«r gjuhĂ«t C dhe C++, u shtua mbĂ«shtetje pĂ«r drejtoritĂ« e pĂ«rpunimit â#elifdefâ dhe â#elififndefâ.
- U shtua flagu â-Wbidi-charsâ pĂ«r tĂ« dhĂ«nĂ« njĂ« paralajmĂ«rim nĂ« rast tĂ« pĂ«rdorimit tĂ« papĂ«rshtatshĂ«m tĂ« simboleve UTF-8, qĂ« ndryshojnĂ« rendin e shfaqjes sĂ« tekstit me dy drejtime.
- U shtua flagu â-Warray-compareâ pĂ«r tĂ« dhĂ«nĂ« njĂ« paralajmĂ«rim kur pĂ«rpiqeni tĂ« krahasoni dy operandĂ« qĂ« i referohen array-ve.
- U vazhdua realizimi i standardeve OpenMP 5.0 dhe 5.1 (Open Multi-Processing), që përcaktojnë API dhe mënyra për të përdorur metodat e programimit paralel në sisteme multi-core dhe hibride (CPU+GPU/DSP) me memorie të përbashkët dhe blloqe vektorizimi (SIMD).
- U përmirësua realizimi i specifikimit të programimit paralel OpenACC 2.6, që përcakton mjetet për të dëbuar operacionet (offloading) në GPU dhe procesorë të specializuar, siç janë NVIDIA PTX.
- Në backend të gjenerimit të kodit për arkitekturën x86 u shtua mbështetje për instrukcionet e zgjeruara Intel AVX512-FP16 dhe tipin _Float16.
- PĂ«r arkitekturĂ«n x86, u shtua mbrojtje nga ndjeshmĂ«ritĂ« nĂ« procesorĂ«t, tĂ« shkaktuara nga ekzekutimi spekulativ tĂ« instrukcioneve pas operacioneve tĂ« kalimit tĂ« drejtpĂ«rdrejtĂ«. Problemi ndodh pĂ«r shkak tĂ« pĂ«rpunimit tĂ« parashikueshĂ«m tĂ« instrukcioneve qĂ« vijnĂ« nĂ« memorie menjĂ«herĂ« pas komandĂ«s sĂ« kalimit (SLS, Straight Line Speculation). PĂ«r tĂ« aktivizuar mbrojtjen, Ă«shtĂ« propozuar opsioni â-mharden-slsâ.
- Në analizuesin statik eksperimental, u shtua përcaktimi i përdorimit të variablave të pa inicializuar. U shtua mbështetje fillestare për analizën e kodit assembler në inline-insert. U përmirësua gjurmimi i gjendjes së memories. Kodi për përpunimin e shprehjeve switch u rishkrua.
- U shtuan 30 thirrje të reja në libgccjit, bibliotekën e ndarë për integrimin e gjeneruesit të kodit në procese të tjera dhe përdorimin për organizimin e kompilimit JIT të kodit byte në kodin e makinerisë.
- NĂ« backend pĂ«r gjenerimin e bytecode BPF Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r mekanizmin CO-RE (Compile Once â Run Everywhere), i cili lejon grumbullimin e kodit eBPF pĂ«r bĂ«rthamĂ«n Linux vetĂ«m njĂ« herĂ« dhe pĂ«rdor njĂ« ngarkues tĂ« veçantĂ« universalisht, qĂ« e adapton programin e ngarkuar pĂ«r bĂ«rthamĂ«n dhe tipet BTF (BPF Type Format) aktuale. CO-RE zgjidh problemin e portabilitetit pĂ«r programet e eBPF tĂ« kompiluar, tĂ« cilat mĂ« parĂ« mund tĂ« pĂ«rdoren vetĂ«m pĂ«r versionin e bĂ«rthamĂ«s pĂ«r tĂ« cilin ishin grumbulluar, pasi pozita e elementeve nĂ« strukturat e tĂ« dhĂ«nave ndryshon nga versi nĂ« versi.
- NĂ« backend pĂ«r arkitekturĂ«n RISC-V Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r zgjerime tĂ« reja tĂ« setit tĂ« komandave zba, zbb, zbc dhe zbs, si dhe ISA-zgjerime pĂ«r operacioneve vektor dhe skalar tĂ« kriptografisĂ«. NĂ« mĂ«nyrĂ« default sigurohet mbĂ«shtetje pĂ«r specifikimin RISC-V ISA 20191213. ĂshtĂ« shtuar flag -mtune=thead-c906, qĂ« pĂ«rfshin optimizime pĂ«r bĂ«rthamĂ«n T-HEAD c906.
- NĂ« backend pĂ«r gjenerimin e kodit pĂ«r GPU-tĂ« AMD tĂ« bazuar nĂ« mikroarkitekturĂ«n GCN Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r tipin __int128_t/integer(kind=16). ĂshtĂ« siguruar mundĂ«sia pĂ«r pĂ«rdorimin e deri nĂ« 40 grupe pune pĂ«r blok kompjuterik (CU) dhe deri nĂ« 16 fronte instrukcionesh (wavefront, grup i fijeve tĂ« ndĂ«rthurura, ekzekutimit paralel SIMD Engine) pĂ«r çdo grup. MĂ« parĂ«, ishte lejuar pĂ«rdorimi i vetĂ«m njĂ« fronti instrukcionesh nĂ« CU.
- NĂ« backend NVPTX, i destinuar pĂ«r gjenerimin e kodit qĂ« pĂ«rdor arkitekturĂ«n e setit tĂ« komandave NVIDIA PTX (Parallel Thread Execution), Ă«shtĂ« shtuar mundĂ«sia pĂ«r pĂ«rdorimin e flagjeve «-march», «-mptx» dhe «-march-map». ĂshtĂ« realizuar mbĂ«shtetje pĂ«r PTX ISA sm_53, sm_70, sm_75 dhe sm_80. NĂ« mĂ«nyrĂ« default pĂ«rdoret arkitektura sm_30.
- Në backend për procesorët PowerPC / PowerPC64 / RS6000 janë rishkruar implementimet e funksioneve të brendshme. Janë dokumentuar funksionet e brendshme __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar dhe __builtin_set_tfiar.
- NĂ« backend pĂ«r arkitekturĂ«n ARM/AArch64 Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r CPU Arm Ampere-1 (-mcpu/-mtune ampere1), Arm Cortex-A510 (cortex-a510), Arm Cortex-A710 (cortex-a710) dhe Arm Cortex-X2 (cortex-x2). ĂshtĂ« shtuar mbĂ«shtetje pĂ«r variante tĂ« reja tĂ« arkitekturĂ«s ARMv8 pĂ«r pĂ«rdorim nĂ« opsionin «-march»: armv8.7-a, armv8.8-a, armv9-a. ĂshtĂ« shtuar implementimi i funksioneve tĂ« brendshme tĂ« kompilatorit pĂ«r ngarkimin dhe ruajtjen atomike tĂ« tĂ« dhĂ«nave nĂ« memorie, e bazuar nĂ« pĂ«rdorimin e instrukcioneve tĂ« avancuara ARM (ls64). ĂshtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rshpejtimin e funksioneve memcpy, memmove dhe memset me ndihmĂ«n e zgjerimit ARM mopsoption.
- ĂshtĂ« shtuar njĂ« regjimi i ri verifikimi «-fsanitize=shadow-call-stack» (ShadowCallStack), i cili aktualisht Ă«shtĂ« i disponueshĂ«m vetĂ«m pĂ«r arkitekturĂ«n AArch64 dhe funksionon gjatĂ« grumbullimit tĂ« kodit me opsionin «-ffixed-r18». Regjimi siguron mbrojtje nga tejkalimi i adresĂ«s sĂ« kthimit nga funksioni nĂ« rast tĂ« tejkalimit tĂ« tamponit nĂ« stack. QĂ«llimi i mbrojtjes Ă«shtĂ« ruajtja pas kalimit tĂ« kontrollit nĂ« funksion tĂ« adresĂ«s sĂ« kthimit nĂ« njĂ« «stack hijeshi» tĂ« veçantĂ« dhe tĂ« nxjerrjes sĂ« kĂ«saj adrese para daljes nga funksioni.
Burimi: opennet.ru
