LLVM 22 kompiliatoriaus rinkinio išleidimas

Po šešių mėnesių kūrimo išleista LLVM 22.1.0 versija. Ji kuria įrankius (kompiliatorius, optimizatorius ir kodo generatorius), kurie kompiliuoja programas į tarpinį RISC tipo virtualių instrukcijų bitų kodą (žemo lygio virtuali mašina su daugiapakopiu optimizavimo sistema). Sukurtas pseudokodas gali būti konvertuojamas į mašininį kodą tam tikrai tikslinei platformai arba naudojamas „just-in-time“ (JIT) kompiliatoriaus, kad generuotų mašinines instrukcijas tiesiogiai programos vykdymo metu. Remiantis LLVM technologijomis, projektas kuria „Clang“ kompiliatorių, palaikantį C, C++ ir Objective-C programavimo kalbas. Pradedant nuo 18.x šakos, projektas perėjo prie naujos versijų numeravimo schemos, pagal kurią kūrimo metu naudojama 0 versija („N.0“), o pirmoji stabili versija numeruojama „N.1“.

„Clang 22“ patobulinimai apima:

  • Pridėta atminties paskirstymo žetonų (Allocation Tokens) palaikymas, skirtas atminties paskirstymo operacijoms, atliekamoms naudojant tokias funkcijas kaip „malloc“, žymėti unikaliu identifikatoriumi. Paskirstymo žetonai leidžia struktūrizuoti kaupo informaciją, supaprastinti atminties nutekėjimo aptikimą ir įgalinti objektų grupuojimą pagal jų paskirtį arba modifikavimo modelius (pvz., atskirti „karštus“ duomenis nuo „šaltų“). Norėdami įjungti, naudokite žymę „-fsanitize=alloc-token“.
  • Su C kalba susijusios funkcijos:
    • Įdiegtas specifikacijos projektas, apibrėžiantis atidėto vykdymo mechanizmą „defer“, leidžiantį vykdyti veiksmus, kai dabartinė taikymo sritis baigiasi. Pridėta žymė „-fdefer-ts“, kad būtų galima įjungti „defer“ palaikymą.
    • Pridėta integruota funkcija __builtin_stack_address(), kuri atkartoja panašią GCC funkciją. Ši funkcija grąžina steko adresą, skiriantį dabartinės funkcijos, iškvietusios __builtin_stack_address() steko sritį nuo vėlesnių jos iškviestų funkcijų.
  • Kuriamos būsimam C2y standartui skirtos galimybės:
    • Pridėta įvardytų ciklų palaikymas, leidžiantis priskirti pavadinimus ciklams ir perjungimo sakiniams, kuriuos galima nurodyti „break“ ir „continue“ sakiniuose, kad būtų aiškiai apibrėžtas ciklas, iš kurio reikia išeiti. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // eiti į CONT1 continue outer; // eiti į CONT2 // CONT1 } // CONT2 }
    • Integruotos „__COUNTER__“ makrokomandos, skirtos unikaliems identifikatorių pavadinimams generuoti, įgyvendinimas buvo išplėstas ir įtrauktas į standartą. Nustatytas 2147483647 šios makrokomandos iškvietimų limitas; viršijus šį limitą, bus sugeneruota klaida.
    • Pašalintas įspėjimas (-Wstatic-in-inline), kai naudojamos statinės funkcijos arba kintamieji funkcijų viduje, deklaruotos kaip „išorinis eilute“.
  • C23 C standarte apibrėžtos galimybės:
    • Antraštės failas „float.h“ dabar palaiko makrokomandas FLT_SNAN, DBL_SNAN ir LDBL_SNAN, kurios įdiegia signalizuotas (sukeliančias išimtį, kai naudojamos aritmetinėse operacijose) NaN reikšmes float, double ir long double tipams.
    • Ištaisyta klaida, kai skirtingi neįvardyti tipai tame pačiame vertimo vienete buvo traktuojami kaip suderinami, jei jų laukai buvo tie patys.
    • „-MG“ žymė, naudojama ignoruoti trūkstamus antraštės failus priklausomybių nuskaitymo metu, buvo išplėsta iki „#embed“ direktyvų ir dabar panaikina klaidą „failas nerastas“, kai trūksta „#embed“ direktyvoje nurodyto failo.
  • Su C++ susijusios funkcijos:
    • Pridėta galimybė naudoti struktūrinius susiejimus „constexpr“ kontekste, kaip sukurta C++2c (C++26) specifikacijoje. Tai reiškia, kad nuorodos į konstantas išraiškas dabar pačios gali būti konstantos išraiškos. Įdiegtas masyvų ir paprastų struktūrų palaikymas (rinkiniai dar nepalaikomi). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Kaip reikalauja C++20 standartas, apribojimai dabar konvertuojami į standartinę formą prieš juos tikrinant, todėl galima gauti tikslesnius diagnostikos pranešimus ir tinkamai apdoroti pakeitimo klaidas šablonų argumentuose, naudojamuose tik koncepcijų ID.
    • Pridėta integruotų funkcijų šeima „__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship“, skirta išsiaiškinti, ar palyginimo operatoriai „<“, „>“, „<=" ir „>=" buvo susintetinti iš operatoriaus „<=>“.
    • Parametras „-Wincompatible-pointer-types“ buvo pakeistas taip, kad vietoj įspėjimo būtų rodoma klaida. Norėdami grįžti prie ankstesnio veikimo, naudokite parinktį „-Wno-error=incompatible-pointer-types“.
  • Pridėtos integruotos funkcijos __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 ir __builtin_dedup_pack. Pavyzdžiui, funkcija builtin_dedup_pack leidžia pašalinti pasikartojančius elementus iš tipų sąrašo: naudojant MyTypeList = TypeList<__builtin_dedup_pack. …>; // gautas tipas bus TypeList
  • Derinant neapibrėžtą elgseną naudojant UBSan (-fsanitize=undefined -fsanitize-trap=undefined), klaidos priežasties informacija dabar įtraukiama į sugeneruotą derinimo informaciją. Pridėta žymė „-fsanitize-debug-trap-reasons“, kad būtų nurodytas klaidos informacijos detalumo lygis. Ją galima nustatyti kaip „basic“, jei reikia bendrų aprašymų (pvz., „Perpildyta sveikųjų skaičių sudėtis“), ir kaip „detailed“, jei reikia išsamios informacijos (pvz., „perpildyta sveikųjų skaičių sudėtis su ženklu 'a + b'“).
  • Pridėtos naujos kompiliatoriaus vėliavėlės:
    • „-f[no-]sanitize-debug-trap-reasons“, skirta valdyti, ar išimčių gaudyklių priežastys yra įterptos į derinimo informaciją, kai kompiliuojama naudojant „-fsanitize-trap“ režimą.
    • „-fsanitize=alloc-token“, „-falloc-token-max“, „-fsanitize-alloc-token-fast-abi“ ir „-fsanitize-alloc-token-extended“, skirti atminties paskirstymo žetonams valdyti.
    • „-fmatrix-memory-layout“, skirtas matricų tipų atminties išdėstymui valdyti (pvz., column-major, jei tai stulpelis-pagrindinis, row-major, jei tai eilutė-pagrindinis).
  • Funkcijos dabar turi atributą „malloc_span“, panašų į atributą „malloc“, bet taikomą funkcijoms, kurios grąžina span tipo struktūras, turinčias rodyklę ir lauką su dydžiu arba rodyklę į bloko pabaigą.
  • Pridėtas atributas „modular_format“, kad susiejimo metu dinamiškai būtų galima pasirinkti reikiamą statiškai susietą printf funkcijos įgyvendinimą.
  • Išplėsti diagnostinės ir statinės analizės įrankiai, pridėta naujų patikrų (kelios dešimtys su diagnostika susijusių patobulinimų).
  • Į X86 posistemį buvo pridėtos papildomos SSE, AVX ir AVX512 plėtinių vidinės savybės. Pridėti kūrimo režimai „Intel“ procesoriams, pagrįstiems „Wildcat Lake“ (-march=wildcatlake) ir „Nova Lake“ (-march=novalake) mikroarchitektūromis.
  • „AArch64“ vidinė sistema dabar palaiko „Ampere Computing“ „Ampere1C“ („ampere1c“), „Arm C1-Nano“ („c1-nano“), „Arm C1-Pro“ („c1-pro“), „Arm C1-Premium“ („c1-premium“) ir „Arm C1-Ultra“ („c1-ultra“) procesorius. Pridėtos papildomos integruotos funkcijos FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] ir FCVTA[US] instrukcijoms. Stabilizuotas funkcijų kelių versijų (FMV) palaikymas. Vartotojai dabar gali nepaisyti skirtingų funkcijų versijų prioritetų.
  • Pridėta „LoongArch32“ (LA32R, LA32S) architektūros parama.
  • Patobulintos ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly ir PowerPC architektūrų vidinės sistemos.

Šaltinis: opennet.ru

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster