Lëshimi i paketës së kompilatorëve GCC 12

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

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster