Vydanie sady kompilátorov LLVM 22

Po šiestich mesiacoch vývoja bola vydaná verzia LLVM 22.1.0. Vyvíja nástroje (kompilátory, optimalizátory a generátory kódu), ktoré kompilujú programy do medziľahlého bitového kódu virtuálnych inštrukcií podobných RISC (nízkoúrovňový virtuálny stroj s viacúrovňovým optimalizačným systémom). Vygenerovaný pseudokód je možné previesť do strojového kódu pre danú cieľovú platformu alebo ho môže použiť kompilátor just-in-time (JIT) na generovanie strojových inštrukcií priamo počas vykonávania programu. Na základe technológií LLVM projekt vyvíja kompilátor Clang, ktorý podporuje programovacie jazyky C, C++ a Objective-C. Počnúc vetvou 18.x projekt prešiel na novú schému číslovania verzií, podľa ktorej sa počas vývoja používa vydanie 0 („N.0“) a prvá stabilná verzia je očíslovaná ako „N.1“.

Vylepšenia v Clang 22 zahŕňajú:

  • Pridaná podpora pre tokeny alokácie pamäte (Alokačné tokeny) na označovanie operácií alokácie pamäte vykonávaných pomocou funkcií, ako je malloc, jedinečným identifikátorom. Alokačné tokeny umožňujú štruktúrovanie informácií o halde, zjednodušujú detekciu únikov pamäte a umožňujú zoskupovanie objektov na základe ich účelu alebo vzorcov modifikácie (napr. oddelenie „horúcich“ od „studených“ údajov). Na povolenie použite príznak „-fsanitize=alloc-token“.
  • Funkcie súvisiace s jazykom C:
    • Bol implementovaný návrh špecifikácie definujúci mechanizmus odloženého vykonávania „defer“, ktorý umožňuje vykonávanie akcií pri ukončení aktuálneho rozsahu. Na povolenie podpory „defer“ bol pridaný príznak „-fdefer-ts“.
    • Bola pridaná vstavaná funkcia __builtin_stack_address(), ktorá kopíruje podobnú funkciu v GCC. Táto funkcia vracia adresu zásobníka oddeľujúcu oblasť zásobníka aktuálnej funkcie, ktorá volala __builtin_stack_address() a následných funkcií, ktoré volá.
  • Možnosti vyvíjané pre budúci štandard C2y:
    • Pridaná podpora pre pomenované slučky, ktorá umožňuje priradiť názvy slučkám a príkazom switch, ktoré je možné zadať v príkazoch break a continue, aby sa explicitne definovala slučka, z ktorej sa má ukončiť. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // prejsť na CONT1 continue outer; // prejsť na CONT2 // CONT1 } // CONT2 }
    • Implementácia vstavaného makra „__COUNTER__“, určeného na generovanie jedinečných identifikátorov, bola rozšírená a zahrnutá do štandardu. Bol nastavený limit 2 147 483 647 volaní tohto makra; prekročenie tohto limitu vygeneruje chybu.
    • Odstránené upozornenie (-Wstatic-in-inline) pri použití statických funkcií alebo premenných vo vnútri funkcií deklarovaných ako „extern inline“.
  • Schopnosti definované v norme C23 C:
    • Hlavičkový súbor float.h teraz podporuje makrá FLT_SNAN, DBL_SNAN a LDBL_SNAN, ktoré implementujú signalizované (spôsobujúce výnimku pri použití v aritmetických operáciách) hodnoty NaN pre typy float, double a long double.
    • Opravená chyba, kde sa rôzne nepomenované typy považovali za kompatibilné v rámci tej istej prekladovej jednotky, ak mali rovnaké polia.
    • Príznak „-MG“ používaný na ignorovanie chýbajúcich hlavičkových súborov počas skenovania závislostí bol rozšírený na direktívy „#embed“ a teraz potláča chybu „súbor sa nenašiel“, keď chýba súbor zadaný v direktíve „#embed“.
  • Funkcie súvisiace s C++:
    • Bola pridaná možnosť používať štruktúrované väzby v kontexte „constexpr“, ako bolo vyvinuté v špecifikácii C++2c (C++26). To znamená, že odkazy na konštantné výrazy môžu byť teraz samy o sebe konštantnými výrazmi. Implementovaná je podpora pre polia a jednoduché štruktúry (n-tice zatiaľ nie sú podporované). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Podľa požiadaviek štandardu C++20 sa obmedzenia pred kontrolou konvertujú do štandardnej formy, čo umožňuje presnejšie diagnostické správy a správne spracovanie chýb substitúcie v argumentoch šablón používaných iba v konceptových ID.
    • Pridaná rodina vstavaných funkcií „__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship“ na zistenie, či boli porovnávacie operátory „<“, „>“, „<=" a „>=" syntetizované z operátora „<=>“.
    • Parameter „-Wincompatible-pointer-types“ bol zmenený tak, aby namiesto varovania vypisoval chybu. Ak sa chcete vrátiť k predchádzajúcemu správaniu, použite možnosť „-Wno-error=incompatible-pointer-types“.
  • Pridané vstavané funkcie __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 a __builtin_dedup_pack. Napríklad, builtin_dedup_pack umožňuje odstrániť duplikáty zo zoznamu typov: pomocou MyTypeList = TypeList<__builtin_dedup_pack …>; // výsledný typ bude TypeList
  • Pri ladení nedefinovaného správania pomocou UBSan (-fsanitize=undefined -fsanitize-trap=undefined) sú informácie o príčine chyby teraz zahrnuté do generovaných ladiacích informácií. Bol pridaný príznak „-fsanitize-debug-trap-reasons“ na určenie úrovne detailov v informáciách o chybe. Je možné ho nastaviť na „základné“ pre všeobecné popisy (napr. „Pretečenie sčítania celočíselných čísel“) a na „podrobné“ pre zahrnutie podrobných informácií (napr. „pretečenie sčítania celočíselných čísel so znamienkom v 'a + b'“).
  • Pridané nové príznaky kompilátora:
    • „-f[no-]sanitize-debug-trap-reasons“ na ovládanie, či sú dôvody zachytávania výnimiek vložené do ladiacích informácií pri kompilácii s režimom „-fsanitize-trap“.
    • „-fsanitize=alloc-token“, „-falloc-token-max“, „-fsanitize-alloc-token-fast-abi“ a „-fsanitize-alloc-token-extended“ na správu tokenov alokácie pamäte.
    • „-fmatrix-memory-layout“ na ovládanie rozloženia pamäte pre typy matíc (napr. column-major pre column-major, row-major pre row-major).
  • Funkcie majú teraz atribút „malloc_span“, podobný atribútu malloc, ale použiteľný pre funkcie, ktoré vracajú štruktúry podobné rozpätiu (span) obsahujúce ukazovateľ a pole s veľkosťou alebo ukazovateľ na koniec bloku.
  • Pridaný atribút „modular_format“ na dynamický výber požadovanej staticky linkovanej implementácie funkcie printf v čase linkovania.
  • Boli rozšírené nástroje diagnostiky a statickej analýzy, boli pridané nové kontroly (niekoľko desiatok vylepšení súvisiacich s diagnostikou).
  • Do backendu X86 boli pridané ďalšie intrinzické komponenty pre rozšírenia SSE, AVX a AVX512. Pre procesory Intel založené na mikroarchitektúrach Wildcat Lake (-march=wildcatlake) a Nova Lake (-march=novalake) boli pridané režimy zostavovania.
  • Backend AArch64 teraz podporuje procesory Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) a Arm C1-Ultra (c1-ultra). Pre inštrukcie FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] a FCVTA[US] boli pridané ďalšie vstavané funkcie. Podpora pre viacero verzií funkcií (FMV) bola stabilizovaná. Používatelia teraz môžu prepísať prioritu rôznych verzií funkcií.
  • Pridaná podpora pre architektúru LoongArch32 (LA32R, LA32S).
  • Vylepšené backendy pre architektúry ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly a PowerPC.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster