Útgáfa af LLVM 22 þýðandasvítunni

Eftir sex mánaða þróun hefur LLVM 22.1.0 verið gefin út. Það þróar verkfæri (þýðendur, fínstillingar og kóðaframleiðendur) sem þýða forrit í millibitakóða af RISC-líkum sýndarleiðbeiningum (lágstigs sýndarvél með fjölstigs fínstillingarkerfi). Hægt er að breyta myndaða gervikóðanum í vélakóða fyrir tiltekið markkerfi eða nota hann af rétt-í-tíma (JIT) þýðanda til að búa til vélaleiðbeiningar beint við keyrslu forrits. Verkefnið byggir á LLVM tækni og þróar Clang þýðandann, sem styður forritunarmálin C, C++ og Objective-C. Byrjað var með 18.x greininni og skipt var yfir í nýtt útgáfunúmerunarkerfi, þar sem útgáfa 0 ("N.0") er notuð við þróun og fyrsta stöðuga útgáfan er númeruð "N.1".

Umbætur í Clang 22 eru ma:

  • Bætt var við stuðningi við úthlutunarmerki fyrir minni (Allocation Tokens) til að merkja úthlutunaraðgerðir sem framkvæmdar eru með föllum eins og malloc með einkvæmu auðkenni. Úthlutunarmerki gera kleift að skipuleggja hrúguupplýsingar, einfalda uppgötvun minnisleka og gera kleift að flokka hluti eftir tilgangi þeirra eða breytingarmynstri (t.d. að aðgreina „heit“ frá „köldum“ gögnum). Til að virkja, notaðu fánann „-fsanitize=alloc-token“.
  • Eiginleikar tengdir C tungumálinu:
    • Drög að forskrift sem skilgreinir frestað framkvæmdarferlið „defer“ hafa verið innleidd, sem gerir kleift að framkvæma aðgerðir þegar núverandi gildissvið er lokið. Fánanum „-fdefer-ts“ hefur verið bætt við til að virkja stuðning við „defer“.
    • Innbyggða fallið __builtin_stack_address() hefur verið bætt við, sem endurspeglar svipað fall í GCC. Þetta fall skilar staflavistfanginu sem aðskilur staflasvæðið í núverandi falli sem kallaði á __builtin_stack_address() og síðari föll sem það kallar á.
  • Eiginleikar sem verið er að þróa fyrir framtíðar C2y staðalinn:
    • Bætt við stuðningi fyrir nefndar lykkjur, sem gerir þér kleift að úthluta nöfnum á lykkjur og skipta skipunum, sem hægt er að tilgreina í break og continue skipunum til að skilgreina nákvæmlega hvaða lykkju á að hætta í. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // fara í CONT1 continue outer; // fara í CONT2 // CONT1 } // CONT2 }
    • Útfærsla innbyggða makrósins "__COUNTER__", sem er hannað til að búa til einstök auðkenni, hefur verið stækkuð og innifalin í staðlinum. Hámarksfjöldi köllunar á þetta makró hefur verið settur upp við 2147483647; ef farið er yfir þessi mörk mun það valda villu.
    • Viðvörun (-Wstatic-in-inline) var fjarlægð þegar notaðar voru kyrrstæðar föll eða breytur innan föll sem skilgreind eru sem „extern inline“.
  • Eiginleikar skilgreindir í C23 C staðlinum:
    • Hausskráin float.h styður nú FLT_SNAN, DBL_SNAN og LDBL_SNAN makró, sem útfæra signaled (sem veldur undantekningu þegar hún er notuð í reikniaðgerðum) NaN gildi fyrir float, double og long double gerðirnar.
    • Lagfærði villu þar sem mismunandi ónefndar gerðir voru meðhöndlaðar sem samhæfar innan sömu þýðingareiningar ef þær höfðu sömu reiti.
    • Fáninn „-MG“ sem notaður var til að hunsa týndar hausskrár við skönnun á tengslum hefur verið útvíkkaður til „#embed“ tilskipana og bælir nú niður villuna „skrá fannst ekki“ þegar skrá sem tilgreind er í „#embed“ tilskipuninni vantar.
  • Eiginleikar tengdir C++:
    • Möguleikinn á að nota skipulögð bindingar í „constexpr“ samhenginu, eins og þróað var í C++2c (C++26) forskriftinni, hefur verið bætt við. Þetta þýðir að tilvísanir í fasta segðir geta nú sjálfar verið fasta segðir. Stuðningur er innleiddur fyrir fylki og einfaldar uppbyggingar (tuples eru ekki enn studdir). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Eins og krafist er í C++20 staðlinum eru skorður nú breyttar í staðlað form áður en þær eru athugaðar, sem gerir kleift að fá nákvæmari greiningarskilaboð og meðhöndla rétta villur í staðgengilsbreytum í sniðmátsbreytum sem eingöngu eru notaðar í hugtakakennum.
    • Bætti við fjölskyldu innbyggðra föllanna "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" til að komast að því hvort samanburðaraðgerðirnar "<", ">", "<=" og ">=" voru myndaðar úr aðgerðinni "<=>".
    • Breytan "-Wincompatible-pointer-types" hefur verið breytt þannig að hún gefur villu í stað viðvörunar. Til að snúa aftur til fyrri hegðunar skal nota valkostinn "-Wno-error=incompatible-pointer-types".
  • Bætt var við innbyggðum föllum __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 og __builtin_dedup_pack. Til dæmis gerir builtin_dedup_pack þér kleift að fjarlægja afrit af lista yfir týpur: með því að nota MyTypeList = TypeList<__builtin_dedup_pack. ...>; // afleidda gerðin verður TypeList
  • Þegar óskilgreind hegðun er kembiforrituð með UBSan (-fsanitize=undefined -fsanitize-trap=undefined), eru upplýsingar um orsök villunnar nú innifaldar í kembiforritunarupplýsingunum sem myndaðar eru. Fáninn "-fsanitize-debug-trap-reasons" hefur verið bætt við til að tilgreina smáatriði í villuupplýsingum. Hægt er að stilla hann á "grunn" fyrir almennar lýsingar (t.d. "Heiltöluaukning yfirflæði") og "ítarlegt" til að innihalda ítarlegar upplýsingar (t.d. "fyrirflæði heiltöluaukningar með formerki í 'a + b'").
  • Nýjum þýðandafánum bætt við:
    • „-f[no-]sanitize-debug-trap-reasons“ til að stjórna hvort ástæður undantekningargildra eru felldar inn í villuleitarupplýsingar þegar þýtt er með „-fsanitize-trap“ ham.
    • „-fsanitize=alloc-token“, „-falloc-token-max“, „-fsanitize-alloc-token-fast-abi“ og „-fsanitize-alloc-token-extended“ til að stjórna úthlutunartáknum fyrir minni.
    • „-fmatrix-memory-layout“ til að stjórna minnisuppsetningu fylkjategunda (t.d. aðaldálkur fyrir aðaldálkur, aðalröð fyrir aðalröð).
  • Föll hafa nú eigindi „malloc_span“, svipað og malloc eigindinn en á við um föll sem skila span-líkum uppbyggingum sem innihalda bendi og reit með stærðinni eða bendi í lok blokkarinnar.
  • Bætti við eigindinni „modular_format“ til að velja á virkan hátt nauðsynlega, kyrrstæða tengda útfærslu printf fallsins þegar tenging er gerð.
  • Greiningar- og stöðugreiningartól hafa verið stækkuð, nýjum athugunum hefur verið bætt við (nokkrir tugir greiningartengdra úrbóta).
  • Viðbótareiginleikar fyrir SSE, AVX og AVX512 viðbæturnar hafa verið bættir við X86 bakendann. Byggingarstillingar hafa verið bættar við fyrir Intel örgjörva sem byggja á örarkitektúrum Wildcat Lake (-march=wildcatlake) og Nova Lake (-march=novalake).
  • Bakendinn í AArch64 styður nú örgjörvana Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) og Arm C1-Ultra (c1-ultra). Innbyggðum aðgerðum hefur verið bætt við fyrir skipanirnar FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] og FCVTA[US]. Stuðningur við fjölútgáfur aðgerða (FMV) hefur verið stöðugri. Notendur geta nú hnekkt forgangi mismunandi útgáfum aðgerða.
  • Bætt við stuðningi við LoongArch32 (LA32R, LA32S) arkitektúr.
  • Bættar bakendir fyrir ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly og PowerPC arkitektúr.

Heimild: opennet.ru

Kauptu áreiðanlega hýsingu fyrir síður með DDoS vernd, VPS VDS netþjónum 🔥 Kauptu áreiðanlega vefhýsingu með DDoS vörn, VPS VDS netþjónum | ProHoster