Ukukhutshwa kwe-LLVM 22 yokuhlanganisa suite

Emva kweenyanga ezintandathu zophuhliso, i-LLVM 22.1.0 ikhutshiwe. Iphuhlisa izixhobo (ii-compilers, ii-optimizers, kunye nee-code generators) eziqokelela iinkqubo zibe yi-bitcode ephakathi yemiyalelo ebonakalayo efana ne-RISC (umatshini we-virtual ophantsi onenkqubo yokwenza ngcono yamanqanaba amaninzi). I-pseudocode evelisiweyo ingaguqulwa ibe yikhowudi yomatshini kwiqonga elithile elijoliswe kulo okanye isetyenziswe yi-just-in-time compiler (JIT) compiler ukuvelisa imiyalelo yomatshini ngqo ngexesha lokwenziwa kwenkqubo. Ngokusekelwe kubuchwepheshe be-LLVM, le projekthi iphuhlisa i-Clang compiler, ixhasa iilwimi zeprogramming ze-C, C++, kunye ne-Objective-C. Ukuqala ngesebe le-18.x, le projekthi itshintshele kwiskimu entsha yokubala inguqulelo, apho kusetyenziswa khona i-0 ("N.0") ngexesha lophuhliso, kwaye inguqulelo yokuqala ezinzileyo inombolo "N.1."

Uphuculo kwiClang 22 lubandakanya:

  • Inkxaso eyongezelelweyo yeethokheni zokwabiwa kwememori (iiAllocation Tokens) zokuphawula imisebenzi yokwabiwa kwememori eyenziwa kusetyenziswa imisebenzi efana ne-malloc enesazisi esahlukileyo. Iithokheni zokwabiwa zivumela ukwakhiwa kolwazi lwe-heap, ukwenza lula ukufunyanwa kokuvuza kwememori, kunye nokuvumela ukuhlanganiswa kwezinto ngokusekelwe kwinjongo yazo okanye kwiipateni zokuguqulwa (umz., ukwahlula idatha "eshushu" kwi "ebandayo"). Ukuze isebenze, sebenzisa iflegi "-fsanitize=alloc-token".
  • Iimpawu ezinxulumene nolwimi lwe-C:
    • Ingcaciso eyilwayo echaza indlela yokusebenza ehlehlisiwe "yokulibazisa" isetyenzisiwe, ivumela izenzo ukuba zenziwe xa umda wangoku uphuma. Iflegi ye-"-fdefer-ts" yongezwe ukuze kuvunyelwe inkxaso ye-"hlehliswa".
    • Umsebenzi owakhelwe ngaphakathi __builtin_stack_address() wongezwe, ubonisa umsebenzi ofanayo kwi-GCC. Lo msebenzi ubuyisela idilesi ye-stack eyahlula indawo ye-stack yomsebenzi wangoku obizwa ngokuba yi-__builtin_stack_address() kunye nemisebenzi elandelayo oyibizayo.
  • Izakhono ziphuhliselwa umgangatho weC2y wexesha elizayo:
    • Inkxaso eyongezelelweyo yee-loops ezibizwa ngamagama, ekuvumela ukuba unike amagama kwii-loops kunye nee-switch statements, ezinokuchazwa kwii-break kunye ne-continue statements ukuchaza ngokucacileyo i-loop yokuphuma kuyo. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
    • Ukusetyenziswa kwe-"__COUNTER__" macro eyakhelwe ngaphakathi, eyilelwe ukuvelisa amagama akhethekileyo okukhomba, kwandisiwe kwaye kwafakwa kumgangatho. Umda weefowuni ezingama-2147483647 kule macro umiselwe; ukudlula lo mda kuya kuvelisa impazamo.
    • Isilumkiso esisusiweyo (-Wstatic-in-line) xa kusetyenziswa imisebenzi emileyo okanye izinto eziguquguqukayo ngaphakathi kwemisebenzi ebhengezwe njenge "extern inline".
  • Izakhono ezichazwe kumgangatho weC23 C:
    • Ifayile ye-float.h header ngoku ixhasa ii-macros ze-FLT_SNAN, DBL_SNAN, kunye ne-LDBL_SNAN, ezisebenzisa i-signaled (ebangela i-exception xa isetyenziswa kwimisebenzi ye-arithmetic) ze-NaN kwiintlobo ze-float, double, kunye ne-long double.
    • Kulungiswe impazamo apho iintlobo ezahlukeneyo ezingachazwanga ngamagama zithathwa njengezihambelanayo ngaphakathi kweyunithi efanayo yokuguqulela ukuba zineendawo ezifanayo.
    • Iflegi ethi "-MG" eyayisetyenziselwa ukungahoyi iifayile zentloko ezilahlekileyo ngexesha lokuskena kokuxhomekeka yandisiwe kwimiyalelo ethi "#embed" kwaye ngoku icinezela impazamo ethi "ifayile ayifumanekanga" xa ifayile echazwe kwimiyalelo ethi "#embed" ingekho.
  • C++ iimpawu ezinxulumene:
    • Ubuchule bokusebenzisa izibophelelo ezicwangcisiweyo kumxholo we-"constexpr", njengoko uphuhlisiwe kwinkcazo ye-C++2c (C++26), bongezwe. Oku kuthetha ukuba iireferensi kwiintetho eziqhubekayo ngoku zinokuba ziintetho eziqhubekayo. Inkxaso iyasebenza kwii-arrays kunye nezakhiwo ezilula (ii-tuples azikaxhaswa). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Njengoko kufuneka ngokomgangatho we-C++20, imida ngoku iguqulwa ibe yimo eqhelekileyo ngaphambi kokuba ihlolwe, okuvumela imiyalezo yokuxilonga echanekileyo kunye nokuphathwa ngokuchanekileyo kweempazamo zokutshintshwa kwiingxoxo zetemplate ezisetyenziswa kuphela kwi-concept-ids.
    • Kongezwe usapho lwemisebenzi eyakhelwe ngaphakathi ethi "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" ukuze kufunyanwe ukuba ngaba ii-operators zokuthelekisa "<", ">", "<=", kunye ne">=" zenziwe kwi-operator ethi "<=>".
    • Ipharamitha ethi "-Wincompatible-pointer-types" itshintshiwe ukuze ikhuphe impazamo endaweni yesilumkiso. Ukuze ubuyele kwindlela ebeziziphatha ngayo ngaphambili, sebenzisa ukhetho oluthi "-Wno-error=incompatible-pointer-types".
  • Kongezwe imisebenzi eyakhelwe ngaphakathi __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter, kunye ne __builtin_dedup_pack. Umzekelo, i-builtin_dedup_pack ikuvumela ukuba ususe iikopi kuluhlu lweentlobo: usebenzisa i-MyTypeList = TypeList<__builtin_dedup_pack ...>; // uhlobo oluphumayo luya kuba yiTypeList
  • Xa kulungiswa indlela yokuziphatha engachazwanga nge-UBSan (-fsanitize=undefined -fsanitize-trap=undefined), ulwazi lwesizathu sempazamo ngoku lufakiwe kulwazi oluvelisiweyo lwe-debug. Iflegi ethi "-fsanitize-debug-trap-reasons" yongezwe ukuze ichaze inqanaba leenkcukacha kulwazi lwempazamo. Ingamiselwa kwi "basic" kwiinkcazo ngokubanzi (umz., "I-Integer addition overflowed") kunye ne "detailed" ukuze ibandakanye ulwazi oluneenkcukacha (umz., "signed integer addition overflow in 'a + b'").
  • Kongezwe iiflegi ezintsha zokuhlanganisa:
    • "-f[no-]sanitize-debug-trap-reasons" ukulawula ukuba izizathu ze-exception trap zifakwe kulwazi lokulungisa iimpazamo xa kuhlanganiswa imo ye-"-fsanitize-trap".
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", kunye "-fsanitize-alloc-token-extended" ukulawula iithokheni zokwabiwa kwememori.
    • "-fmatrix-memory-layout" ukulawula uyilo lwememori lweentlobo ze-matrix (umz. ikholamu-enkulu kwikholamu-enkulu, umqolo-enkulu kwi-row-enkulu).
  • Imisebenzi ngoku ine-attribute ethi "malloc_span", efana ne-attribute ethi malloc kodwa isebenza kwimisebenzi ebuyisela izakhiwo ezifana ne-span eziqulethe i-pointer kunye nentsimi enobukhulu okanye i-pointer ekupheleni kwebhloko.
  • Yongeza uphawu lwe "modular_format" ukuze ukhethe ngokuguquguqukayo ukuphunyezwa okufunekayo okudityaniswe ngokweenkcukacha komsebenzi we-printf ngexesha lekhonkco.
  • Izixhobo zokuxilonga kunye nezohlalutyo olungaguqukiyo zandisiwe, kufakwe iitshekhi ezintsha (uphuculo oluninzi olunxulumene noxilongo).
  • Izinto ezongezelelweyo ze-SSE, AVX, kunye ne-AVX512 zongezwe kwi-backend ye-X86. Iindlela zokwakha zongezwe kwi-Intel CPUs ezisekwe kwi-Wildcat Lake (-march=wildcatlake) kunye ne-Nova Lake (-march=novalake).
  • I-backend ye-AArch64 ngoku ixhasa i-Ampere Computing Ampere1C (ampere1c), i-Arm C1-Nano (c1-nano), i-Arm C1-Pro (c1-pro), i-Arm C1-Premium (c1-premium), kunye neeprosesa ze-Arm C1-Ultra (c1-ultra). Imisebenzi eyongezelelweyo eyakhelwe ngaphakathi yongezwe kwimiyalelo ye-FCVTZ[US], i-FCVTN[US], i-FCVTM[US], i-FCVTP[US], kunye ne-FCVTA[US]. Inkxaso ye-Function Multi-Versioning (FMV) izinzile. Abasebenzisi ngoku banokudlula ukubaluleka kweenguqulelo zomsebenzi ezahlukeneyo.
  • Inkxaso eyongeziweyo yoyilo lweLoongArch32 (LA32R, LA32S).
  • Ii-backends eziphuculweyo ze-ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, kunye nePowerPC architectures.

umthombo: opennet.ru

Thenga ukusingathwa okuthembekileyo kwiindawo ezinokhuseleko lweDDoS, iiseva zeVPS VDS πŸ”₯ Thenga ukusingathwa kwewebhusayithi okuthembekileyo ngokhuseleko lwe-DDoS, iiseva zeVPS VDS | ProHoster