Bayan watanni shida na haɓakawa, an saki LLVM 22.1.0. Yana haɓaka kayan aiki (masu tattarawa, masu ingantawa, da masu samar da lambar) waɗanda ke tattara shirye-shirye zuwa matsakaicin lambar bit na umarnin kama-da-wane irin na RISC (inji mai ƙarancin matakin kama-da-wane tare da tsarin ingantawa matakai da yawa). Ana iya canza lambar sirri da aka samar zuwa lambar na'ura don wani dandamali da aka ba da manufa ko kuma mai tarawa mai dacewa (JIT) zai yi amfani da shi don samar da umarnin na'ura kai tsaye yayin aiwatar da shirin. Dangane da fasahar LLVM, aikin yana haɓaka mai tarawa na Clang, yana tallafawa harsunan shirye-shiryen C, C++, da Objective-C. Farawa da reshen 18.x, aikin ya canza zuwa sabon tsarin lambobi na sigar, wanda a cewarsa ake amfani da sakin 0 ("N.0") yayin haɓakawa, kuma sigar farko mai karko ana lamba "N.1."
Abubuwan haɓakawa a cikin Clang 22 sun haɗa da:
- An ƙara tallafi ga alamun rarraba ƙwaƙwalwa (Alamomin Rarrabawa) don yiwa ayyukan rarraba ƙwaƙwalwa alama ta amfani da ayyuka kamar malloc tare da mai ganowa na musamman. Alamomin rarrabawa suna ba da damar tsara bayanai na tarin abubuwa, sauƙaƙe gano ɓarnar ƙwaƙwalwa, da kuma ba da damar haɗa abubuwa bisa ga manufarsu ko tsarin gyara su (misali, raba bayanai "zafi" daga "sanyi"). Don kunna, yi amfani da tutar "-fsanitize=alloc-token".
- Siffofi masu alaƙa da harshen C:
- An aiwatar da daftarin ƙayyadadden bayani wanda ke bayyana tsarin aiwatar da jinkirta "jinkiri", wanda ke ba da damar aiwatar da ayyuka lokacin da ikon yanzu ya fita. An ƙara tutar "-fdefer-ts" don ba da damar tallafin "jinkiri".
- An ƙara aikin ginannen __builtin_stack_address(), wanda ke kwaikwayon irin wannan aikin a cikin GCC. Wannan aikin yana dawo da adireshin tari wanda ke raba yankin tari na aikin yanzu wanda ake kira __builtin_stack_address() da ayyukan da yake kira daga baya.
- Abubuwan da ake haɓakawa don ma'aunin C2y na gaba:
- An ƙara tallafi ga madaukai masu suna, wanda ke ba ku damar sanya sunaye ga madaukai da maganganun canzawa, waɗanda za a iya ƙayyade su a cikin maganganun karya da ci gaba don bayyana madaukai da za a fita daga. waje: don (int i = 0; i < IK; ++ i) { don (int j = 0; j < JK; ++ j) { ci gaba; // je zuwa CONT1 ci gaba a waje; // je zuwa CONT2 // CONT1 } // CONT2 }
- An faɗaɗa aiwatar da macro "__COUNTER__" da aka gina a ciki, wanda aka tsara don samar da sunayen masu ganowa na musamman, kuma an haɗa shi cikin mizanin. An saita iyaka ta kira 2147483647 zuwa wannan macro; wuce wannan iyaka zai haifar da kuskure.
- An cire gargaɗin (-Wstatic-in-in-line) lokacin amfani da ayyuka marasa motsi ko masu canji a cikin ayyuka da aka ayyana a matsayin "extern inline".
- Abubuwan da aka ayyana a ma'aunin C23 C:
- Fayil ɗin kan float.h yanzu yana goyan bayan macros na FLT_SNAN, DBL_SNAN, da LDBL_SNAN, waɗanda ke aiwatar da ƙimar NaN don nau'ikan nau'ikan float, double, da dogaye.
- An gyara wani kuskure inda aka yi la'akari da nau'ikan daban-daban da ba a san sunayensu ba a matsayin masu dacewa a cikin sashin fassara ɗaya idan suna da filayen iri ɗaya.
- An faɗaɗa alamar "-MG" da ake amfani da ita don yin watsi da fayilolin kanun da suka ɓace yayin duba dogaro zuwa umarnin "#embed" kuma yanzu tana danne kuskuren "ba a sami fayil ɗin ba" lokacin da fayil ɗin da aka ƙayyade a cikin umarnin "#embed" ya ɓace.
- Abubuwan da ke da alaƙa da C++:
- An ƙara ikon amfani da maƙallan tsari a cikin mahallin "constexpr", kamar yadda aka haɓaka a cikin ƙayyadaddun C++2c (C++26). Wannan yana nufin cewa nassoshi ga maganganu masu ɗorewa yanzu na iya zama maganganu masu ɗorewa. Ana aiwatar da tallafi don tsararru da sifofi masu sauƙi (tuples ba a tallafawa tukuna ba). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Kamar yadda ma'aunin C++20 ya buƙata, yanzu an mayar da ƙuntatawa zuwa tsari na yau da kullun kafin a duba su, wanda ke ba da damar samun ingantattun saƙonnin ganewar asali da kuma kula da kurakuran maye gurbin da suka dace a cikin hujjojin samfuri da aka yi amfani da su kawai a cikin ra'ayoyi.
- An ƙara iyali na ayyukan da aka gina a ciki "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" don gano ko masu sarrafa kwatancen "<", ">", "<=", da ">=" an haɗa su ne daga mai aiki "<=>".
- An canza sigar "-Wincompatible-pointer-types" don fitar da kuskure maimakon gargaɗi. Don komawa ga halin da ya gabata, yi amfani da zaɓin "-Wno-error=incompatible-pointer-types".
- An ƙara ayyuka na ciki __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, da __builtin_dedup_pack. Misali, builtin_dedup_pack yana ba ku damar cire kwafi daga jerin nau'ikan: ta amfani da MyTypeList = TypeList <__builtin_dedup_pack ...>; // nau'in da zai biyo baya zai zama TypeList
- Idan aka yi kuskuren gyara hali mara ma'ana tare da UBSan (-fsanitize=undefined -fsanitize-trap=undefined), yanzu an haɗa bayanan dalilin kuskure a cikin bayanan gyara da aka samar. An ƙara tutar "-fsanitize-debug-trap-reasons" don ƙayyade matakin cikakkun bayanai a cikin bayanan kuskure. Ana iya saita shi zuwa "asalin" don bayanin gabaɗaya (misali, "ƙarin lambobi ya cika") da "cikakke" don haɗawa da cikakkun bayanai (misali, "ƙarin lambobi da aka sanya hannu a cikin 'a + b'").
- An ƙara sabbin tutocin masu tarawa:
- "-f[no-]sanitize-debug-trap-reasons" don sarrafa ko dalilan tarko na exception suna cikin bayanan cire kuskure lokacin tattarawa tare da yanayin "-fsanitize-trap".
- "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", da kuma "-fsanitize-alloc-token-extended" don sarrafa alamun rarraba ƙwaƙwalwa.
- "-fmatrix-memory-layout" don sarrafa tsarin ƙwaƙwalwar ajiya na nau'ikan matrix (misali ginshiƙi-babban don ginshiƙi-babban, layi-babban don layi-babban).
- Ayyuka yanzu suna da siffa ta "malloc_span", kama da siffa ta malloc amma suna aiki ga ayyukan da ke dawo da sifofi masu kama da span waɗanda ke ɗauke da mai nuna alama da filin da ke da girman ko mai nuna alama zuwa ƙarshen toshe.
- An ƙara siffa ta "modular_format" don zaɓar aiwatar da aikin printf da aka haɗa ta atomatik a lokacin haɗin.
- An faɗaɗa kayan aikin bincike da na nazari a tsaye, an ƙara sabbin bincike (an ƙara wasu gyare-gyare da suka shafi bincike da dama).
- An ƙara ƙarin abubuwan da ke cikin ƙarin SSE, AVX, da AVX512 zuwa ga ƙarshen X86. An ƙara yanayin ginawa don Intel CPUs bisa ga Wildcat Lake (-march=wildcatlake) da Nova Lake (-march=novalake) microarchitectures.
- A baya na AArch64 yanzu yana goyan bayan Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), da Arm C1-Ultra (c1-ultra). An ƙara ƙarin ayyuka da aka gina a ciki don umarnin FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], da FCVTA[US]. An daidaita tallafin Function Multi-Versioning (FMV). Masu amfani yanzu za su iya shawo kan fifikon nau'ikan ayyuka daban-daban.
- An ƙara tallafi ga tsarin LoongArch32 (LA32R, LA32S).
- Ingantaccen tsarin baya don tsarin ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, da PowerPC.
source: budenet.ru
