Ħruġ tas-suite tal-kompilaturi GCC 12

Wara sena ta 'żvilupp, ġiet rilaxxata s-suite tal-kompilaturi b'xejn GCC 12.1, l-ewwel rilaxx sinifikanti fil-fergħa l-ġdida tal-GCC 12.x. Skont l-iskema l-ġdida tan-numerazzjoni tar-rilaxx, il-verżjoni 12.0 intużat fil-proċess tal-iżvilupp, u ftit qabel ir-rilaxx tal-GCC 12.1, il-fergħa tal-GCC 13.0 kienet diġà ħarġet, li fuq il-bażi tagħha r-rilaxx ewlieni li jmiss, GCC 13.1, kien se jiġu ffurmati. Fit-23 ta’ Mejju, il-proġett se jiċċelebra 35 sena mill-formazzjoni tal-ewwel edizzjoni tal-GCC.

Bidliet ewlenin:

  • Appoġġ miżjud għall-format ta 'debugging CTF (Compact Type Format), li jipprovdi ħażna kompatta ta' informazzjoni dwar tipi C, konnessjonijiet bejn funzjonijiet u simboli ta 'debugging. Meta inkorporat f'oġġetti ELF, il-format jippermetti l-użu ta 'tabelli ta' karattri EFL biex tiġi evitata d-duplikazzjoni tad-dejta.
  • L-appoġġ għall-format tal-ħażna ta 'informazzjoni ta' debugging "STABS", maħluqa fis-snin tmenin, ġie deprecated.
  • Il-ħidma tkompli tespandi l-appoġġ għall-istandards futuri C2X u C++23 għal-lingwi C u C++. Pereżempju, ġie miżjud appoġġ għall-espressjoni “jekk consteval”; permess li juża auto fl-argumenti tal-funzjoni (“f(auto(g()))”); l-użu ta' varjabbli mhux letterali, goto u tikketti huwa permess f'funzjonijiet iddikjarati bħala constexpr; appoġġ miżjud għall-operatur tal-operaturi tal-indiċi multidimensjonali[]; f'if, għal u jaqilbu, il-kapaċitajiet tal-blokki tal-inizjalizzazzjoni ġew estiżi ("għal (bl-użu ta' T = int; T e : v)").
  • Il-Librerija Standard C++ tejbet l-appoġġ għas-sezzjonijiet sperimentali tal-istandards C++20 u C++23. Appoġġ miżjud għal std::move_only_function, , std::basic_string::resize_and_overwrite, , u std::invoke_r. Konċess li juża std::unique_ptr, std::vector, std::basic_string, std::optional u std::variant fil-funzjonijiet constexpr.
  • Il-frontend Fortran jipprovdi appoġġ sħiħ għall-ispeċifikazzjoni TS 29113, li tiddeskrivi l-kapaċitajiet biex tiġi żgurata l-portabbiltà bejn il-kodiċi Fortran u C.
  • Appoġġ miżjud għall-estensjoni __builtin_shufflevector(vec1, vec2, index1, index2, ...) miżjuda qabel ma 'Clang, li toffri sejħa waħda biex twettaq operazzjonijiet ta' shuffle u shuffle ta' vectors komuni.
  • Meta tuża l-livell ta 'ottimizzazzjoni "-O2", il-vettorizzazzjoni hija attivata b'mod awtomatiku (il-modi -ftree-vectorize u -fvect-cost-model=very-rħas huma attivati). Il-mudell irħas ħafna jippermetti vettorizzazzjoni biss jekk il-kodiċi tal-vettur jista 'jissostitwixxi kompletament il-kodiċi skalari li qed jiġi vettorizzat.
  • Modalità "-ftrivial-auto-var-init" miżjuda biex tippermetti l-inizjalizzazzjoni espliċita tal-varjabbli fuq il-munzell biex jintraċċaw il-kwistjonijiet u jimblokka l-vulnerabbiltajiet assoċjati mal-użu ta 'varjabbli mhux inizjalizzati.
  • Għal-lingwi C u C++, ġiet miżjuda funzjoni built-in __builtin_dynamic_object_size biex tiddetermina d-daqs ta 'oġġett, kompatibbli ma' funzjoni simili minn Clang.
  • Għal-lingwi C u C++, ġie miżjud appoġġ għall-attribut "mhux disponibbli" (per eżempju, tista 'timmarka funzjonijiet li se jiġġeneraw żball jekk tipprova tużahom).
  • Għal-lingwi C u C++, ġie miżjud appoġġ għad-direttivi ta’ preproċessar “#elifdef” u “#elifndef”.
  • Miżjud il-marka "-Wbidi-chars" biex turi twissija jekk il-karattri UTF-8 jintużaw b'mod żbaljat, u b'hekk tinbidel l-ordni li fiha jintwera t-test bidirezzjonali.
  • Miżjud "-Warray-compare" bandiera biex twissi meta tipprova tqabbel żewġ operandi li jirreferu għal arrays.
  • L-implimentazzjoni tal-istandards OpenMP 5.0 u 5.1 (Open Multi-Processing), li jiddefinixxu l-API u l-metodi għall-applikazzjoni ta’ metodi ta’ programmazzjoni parallela fuq sistemi multi-core u ibridi (CPU + GPU/DSP) b’unitajiet ta’ memorja u vettorizzazzjoni kondiviżi (SIMD) , kompliet.
  • Implimentazzjoni mtejba tal-ispeċifikazzjoni tal-ipprogrammar parallel OpenACC 2.6, li tiddefinixxi għodod għall-operazzjonijiet ta 'ħatt fuq GPUs u proċessuri speċjalizzati bħal NVIDIA PTX.
  • L-appoġġ għall-istruzzjonijiet estiżi Intel AVX86-FP512 u t-tip _Float16 ġie miżjud mal-backend tal-ġenerazzjoni tal-kodiċi għall-arkitettura x16.
  • Għall-arkitettura x86, ġiet miżjuda protezzjoni kontra vulnerabbiltajiet fil-proċessuri kkawżati minn eżekuzzjoni spekulattiva ta 'struzzjonijiet wara operazzjonijiet ta' qabża 'l quddiem mingħajr kundizzjonijiet. Il-problema sseħħ minħabba l-ipproċessar preventiv ta 'struzzjonijiet immedjatament wara l-istruzzjoni tal-fergħa fil-memorja (SLS, Straight Line Speculation). Biex tkun permessa l-protezzjoni, hija proposta l-għażla “-mharden-sls”.
  • Miżjud skoperta ta 'l-użu ta' varjabbli mhux inizjalizzati għall-analizzatur statiku sperimentali. Miżjud appoġġ inizjali għall-analiżi tal-kodiċi tal-assemblaġġ f'inserzjonijiet inline. Traċċar tal-memorja mtejba. Il-kodiċi għall-ipproċessar tal-espressjonijiet tal-iswiċċ inkiteb mill-ġdid.
  • Żiedet 30 sejħa ġdida għal libgccjit, librerija kondiviża għall-inkorporazzjoni ta 'ġeneratur tal-kodiċi fi proċessi oħra u tużah biex JIT tikkompila bytecode f'kodiċi tal-magni.
  • L-appoġġ għall-mekkaniżmu CO-RE (Kompila Darba - Mexxi Kullimkien) ġie miżjud mal-backend għall-ġenerazzjoni tal-bytecode BPF, li jippermettilek li tiġbor il-kodiċi tal-programmi eBPF għall-kernel Linux darba biss u tuża loader universali speċjali li tadatta l- programm mgħobbi għall-għadma attwali u l-Format tat-Tipi BPF). CO-RE issolvi l-problema tal-portabbiltà tal-programmi eBPF ikkumpilati, li qabel setgħu jintużaw biss fil-verżjoni tal-qalba li għaliha ġew ikkompilati, peress li l-pożizzjoni tal-elementi fl-istrutturi tad-dejta tinbidel minn verżjoni għall-oħra.
  • Il-backend RISC-V iżid appoġġ għal estensjonijiet ġodda ta 'arkitettura ta' sett ta 'struzzjonijiet zba, zbb, zbc u zbs, kif ukoll estensjonijiet ISA għal operazzjonijiet kriptografiċi vector u skalari. B'mod awtomatiku, huwa pprovdut appoġġ għall-ispeċifikazzjoni RISC-V ISA 20191213. Il-bandiera -mtune=thead-c906 ġiet miżjuda biex tippermetti ottimizzazzjonijiet għall-qalba T-HEAD c906.
  • L-appoġġ għat-tip __int128_t/integer(kind=16) ġie miżjud mal-backend tal-ġenerazzjoni tal-kodiċi għal AMD GPUs ibbażati fuq il-mikroarkitettura GCN. Huwa possibbli li jintużaw sa 40 grupp ta 'xogħol għal kull unità tal-kompjuter (CU) u sa 16-il front ta' struzzjoni (wavefront, sett ta 'ħjut esegwiti b'mod parallel mill-Magna SIMD) għal kull grupp. Preċedentement, kien permess biss tarf ta 'struzzjoni għal kull CU.
  • Il-backend NVPTX, iddisinjat biex jiġġenera kodiċi bl-użu tal-arkitettura tas-sett ta 'struzzjonijiet NVIDIA PTX (Parallel Thread Execution), żied il-kapaċità li juża l-bnadar "-march", "-mptx" u "-march-map". Appoġġ implimentat għal PTX ISA sm_53, sm_70, sm_75 u sm_80. L-arkitettura default hija sm_30.
  • Fil-backend għall-proċessuri PowerPC / PowerPC64 / RS6000, l-implimentazzjonijiet tal-funzjonijiet integrati ġew miktuba mill-ġdid. Il-funzjonijiet built-in __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhartin huma __builtin_set_tfhartin u __tfhartin
  • Appoġġ għal Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) u Arm Cortex-X710 (cortex- x2). Appoġġ miżjud għal għażliet ġodda ta 'arkitettura ARMv2 għall-użu mal-għażla "-march": armv8-a, armv8.7-a, armv8.8-a. Implimentazzjoni miżjuda ta 'funzjonijiet C mibnija fil-kompilatur (Intrinsics) għat-tagħbija atomika u l-iffrankar tad-dejta fil-memorja, ibbażata fuq l-użu ta' struzzjonijiet ARM estiżi (ls9). Appoġġ miżjud għall-aċċellerazzjoni tal-funzjonijiet memcpy, memmove u memset bl-użu tal-estensjoni ARM mopsoption.
  • Żid mod ta 'kontroll ġdid "-fsanitize=shadow-call-stack" (ShadowCallStack), li bħalissa huwa disponibbli biss għall-arkitettura AArch64 u jaħdem meta jibni kodiċi bl-għażla "-ffixed-r18". Il-mod jipprovdi protezzjoni kontra l-kitba fuq l-indirizz tar-ritorn minn funzjoni fil-każ ta 'overflow tal-buffer fuq il-munzell. L-essenza tal-protezzjoni hija li tissejvja l-indirizz tar-ritorn f'munzell separat ta '"dell" wara li ttrasferixxi l-kontroll għal funzjoni u tirkupra dan l-indirizz qabel ma toħroġ mill-funzjoni.

Sors: opennet.ru

Żid kumment