Kutolewa kwa safu ya mkusanyaji ya LLVM 22

Baada ya miezi sita ya uundaji, LLVM 22.1.0 imetolewa. Inatengeneza zana (vikusanyaji, viboreshaji, na jenereta za msimbo) zinazokusanya programu katika msimbo wa kati wa maagizo pepe kama RISC (mashine pepe ya kiwango cha chini yenye mfumo wa uboreshaji wa viwango vingi). Msimbo bandia unaozalishwa unaweza kubadilishwa kuwa msimbo wa mashine kwa jukwaa lengwa fulani au kutumiwa na mkusanyaji wa wakati unaofaa (JIT) ili kutoa maagizo ya mashine moja kwa moja wakati wa utekelezaji wa programu. Kulingana na teknolojia za LLVM, mradi unaunda mkusanyaji wa Clang, unaounga mkono lugha za programu za C, C++, na Lengo-C. Kuanzia na tawi la 18.x, mradi ulibadilisha hadi mpango mpya wa nambari za toleo, kulingana na ambayo toleo 0 ("N.0") linatumika wakati wa uundaji, na toleo la kwanza thabiti lina nambari "N.1."

Maboresho katika Clang 22 ni pamoja na:

  • Usaidizi ulioongezwa kwa tokeni za ugawaji kumbukumbu (Tokeni za Ugawaji) kwa ajili ya kuashiria shughuli za ugawaji kumbukumbu zinazofanywa kwa kutumia vitendakazi kama vile malloc yenye kitambulisho cha kipekee. Tokeni za ugawaji huruhusu kupanga taarifa za rundo, kurahisisha ugunduzi wa uvujaji wa kumbukumbu, na kuwezesha upangaji wa vitu kulingana na madhumuni yao au mifumo ya urekebishaji (k.m., kutenganisha data ya "moto" kutoka "baridi"). Ili kuwezesha, tumia bendera ya "-fsanitize=alloc-token".
  • Vipengele vinavyohusiana na lugha ya C:
    • Rasimu ya vipimo vinavyofafanua utaratibu wa utekelezaji ulioahirishwa wa "kuahirisha" imetekelezwa, ikiruhusu vitendo kutekelezwa wakati wigo wa sasa unapotoka. Bendera ya "-fdefer-ts" imeongezwa ili kuwezesha usaidizi wa "kuahirisha".
    • Kitendakazi kilichojengewa ndani __builtin_stack_address() kimeongezwa, kikiakisi kitendakazi sawa katika GCC. Kitendakazi hiki hurejesha anwani ya rafu inayotenganisha eneo la rafu la kitendakazi cha sasa kinachoitwa __builtin_stack_address() na vitendakazi vinavyofuata vinavyoitwa.
  • Uwezo unaotengenezwa kwa kiwango cha C2y cha siku zijazo:
    • Usaidizi ulioongezwa kwa vitanzi vilivyopewa majina, ambao hukuruhusu kugawa majina kwa vitanzi na kauli za kubadili, ambazo zinaweza kubainishwa katika kauli za break and continue ili kufafanua wazi kitanzi cha kutoka. 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 }
    • Utekelezaji wa makro iliyojengewa ndani ya "__COUNTER__", iliyoundwa ili kutoa majina ya kipekee ya vitambulisho, umepanuliwa na kujumuishwa katika kiwango. Kikomo cha simu 2147483647 kwa makro hii kimewekwa; kuzidi kikomo hiki kutasababisha hitilafu.
    • Onyo lililoondolewa (-Wstatic-in-line) wakati wa kutumia chaguo za utendaji tuli au vigezo ndani ya chaguo za utendaji zilizotangazwa kama "extern inline".
  • Uwezo uliobainishwa katika kiwango cha C23 C:
    • Faili ya kichwa cha float.h sasa inasaidia makro za FLT_SNAN, DBL_SNAN, na LDBL_SNAN, ambazo hutekeleza thamani za NaN zenye ishara (na kusababisha ubaguzi wakati zinatumika katika shughuli za hesabu) kwa aina mbili za kuelea, mbili, na ndefu.
    • Imerekebisha hitilafu ambapo aina tofauti zisizo na majina zilichukuliwa kama zinazoendana ndani ya kitengo kimoja cha tafsiri ikiwa zilikuwa na sehemu zinazofanana.
    • Bendera ya "-MG" inayotumika kupuuza faili za kichwa zinazokosekana wakati wa uchanganuzi wa utegemezi imepanuliwa hadi maagizo ya "#embed" na sasa inakandamiza hitilafu ya "faili halikupatikana" wakati faili iliyoainishwa katika maagizo ya "#embed" haipo.
  • Vipengele vinavyohusiana na C++:
    • Uwezo wa kutumia vifungo vilivyopangwa katika muktadha wa "constexpr", kama ilivyotengenezwa katika vipimo vya C++2c (C++26), umeongezwa. Hii ina maana kwamba marejeleo ya misemo isiyobadilika sasa yanaweza kuwa misemo isiyobadilika. Usaidizi unatekelezwa kwa safu na miundo rahisi (tuples bado hazijaungwa mkono). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Kama inavyohitajika na kiwango cha C++20, vikwazo sasa vinabadilishwa kuwa umbo la kawaida kabla ya kukaguliwa, kuruhusu ujumbe sahihi zaidi wa utambuzi na utunzaji sahihi wa makosa ya ubadilishaji katika hoja za kiolezo zinazotumika tu katika vitambulisho vya dhana.
    • Aliongeza familia ya vitendakazi vilivyojengewa ndani "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" ili kujua kama viendeshaji vya kulinganisha "<", ">", "<=", na ">=" vilitengenezwa kutoka kwa kiendeshaji "<=>".
    • Kigezo cha "-Win-compatible-pointer-aina" kimebadilishwa ili kutoa hitilafu badala ya onyo. Ili kurudi kwenye tabia ya awali, tumia chaguo la "-Wno-error=incompatible-pointer-aina".
  • Vitendakazi vilivyojengewa ndani __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, na __builtin_dedup_pack. Kwa mfano, builtin_dedup_pack hukuruhusu kuondoa nakala kutoka kwenye orodha ya aina: kwa kutumia MyTypeList = TypeList<__builtin_dedup_pack ...>; // aina inayotokana itakuwa TypeList
  • Wakati wa kurekebisha tabia isiyofafanuliwa na UBSan (-fsanitize=undefined -fsanitize-trap=undefined), taarifa ya chanzo cha hitilafu sasa imejumuishwa katika taarifa ya utatuzi iliyozalishwa. Bendera ya "-fsanitize-debug-trap-reasons" imeongezwa ili kubainisha kiwango cha maelezo katika taarifa ya hitilafu. Inaweza kuwekwa kuwa "msingi" kwa maelezo ya jumla (k.m., "Nyongeza ya Namba Kamili imefurika") na "ya kina" ili kujumuisha taarifa za kina (k.m., "nyongeza ya nambari kamili iliyosainiwa imefurika katika 'a + b'").
  • Imeongeza bendera mpya za mkusanyaji:
    • "-f[no-]sanitize-debug-trap-reasons-" ili kudhibiti kama sababu za mitego ya ubaguzi zimepachikwa katika taarifa ya utatuzi wakati wa kukusanya kwa kutumia modi ya "-fsanitize-trap".
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", na "-fsanitize-alloc-token-extended" ili kudhibiti tokeni za ugawaji kumbukumbu.
    • "-fmatrix-memory-layout" ili kudhibiti mpangilio wa kumbukumbu wa aina za matrix (k.m. safu-kuu kwa safu-kuu, safu-kuu kwa safu-kuu).
  • Vitendakazi sasa vina sifa ya "malloc_span", sawa na sifa ya malloc lakini inatumika kwa vitendakazi vinavyorudisha miundo kama span iliyo na kiashiria na sehemu yenye ukubwa au kiashiria hadi mwisho wa kizuizi.
  • Imeongeza sifa ya "modular_format" ili kuchagua kwa njia inayobadilika utekelezaji unaohitajika uliounganishwa kiotomatiki wa kitendakazi cha printf wakati wa kiungo.
  • Zana za uchunguzi na uchambuzi tuli zimepanuliwa, ukaguzi mpya umeongezwa (maboresho kadhaa yanayohusiana na uchunguzi).
  • Vipengele vya ziada vya ndani vya viendelezi vya SSE, AVX, na AVX512 vimeongezwa kwenye sehemu ya nyuma ya X86. Hali za ujenzi zimeongezwa kwa CPU za Intel kulingana na usanifu mdogo wa Wildcat Lake (-march=wildcatlake) na Nova Lake (-march=novalake).
  • Sehemu ya nyuma ya AArch64 sasa inasaidia Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), na Arm C1-Ultra (c1-ultra). Vitendaji vya ziada vilivyojengewa ndani vimeongezwa kwa maagizo ya FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], na FCVTA[US]. Usaidizi wa Matoleo Mbalimbali ya Kazi (FMV) umeimarishwa. Watumiaji sasa wanaweza kupuuza kipaumbele cha matoleo tofauti ya vitendaji.
  • Imeongeza usaidizi kwa usanifu wa LoongArch32 (LA32R, LA32S).
  • Sehemu za nyuma zilizoboreshwa kwa ajili ya usanifu wa ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, na PowerPC.

Chanzo: opennet.ru

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS πŸ”₯ Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster