LLVM 22 kompilatoru komplekta izlaišana

Pēc sešu mēnešu izstrādes ir izlaista LLVM 22.1.0 versija. Tā izstrādā rīkus (kompilatorus, optimizētājus un koda ģeneratorus), kas kompilē programmas RISC līdzīgu virtuālo instrukciju starpposma bitkodā (zema līmeņa virtuālā mašīna ar daudzlīmeņu optimizācijas sistēmu). Ģenerēto pseidokodu var pārveidot mašīnkodā konkrētai mērķa platformai vai izmantot tieši laikā (JIT) kompilators, lai ģenerētu mašīninstrukcijas tieši programmas izpildes laikā. Balstoties uz LLVM tehnoloģijām, projekta ietvaros tiek izstrādāts Clang kompilators, kas atbalsta C, C++ un Objective-C programmēšanas valodas. Sākot ar 18.x atzaru, projekts pārgāja uz jaunu versiju numerācijas shēmu, saskaņā ar kuru izstrādes laikā tiek izmantota 0. versija ("N.0"), un pirmā stabilā versija tiek numurēta ar "N.1".

Clang 22 uzlabojumi ietver:

  • Pievienots atbalsts atmiņas piešķiršanas žetoniem (Allocation Tokens), lai ar unikālu identifikatoru atzīmētu atmiņas piešķiršanas operācijas, kas veiktas, izmantojot tādas funkcijas kā malloc. Piešķiršanas žetoni ļauj strukturēt kaudzes informāciju, vienkāršot atmiņas noplūdes noteikšanu un iespējot objektu grupēšanu, pamatojoties uz to mērķi vai modifikācijas modeļiem (piemēram, atdalot "karstos" datus no "aukstajiem" datiem). Lai iespējotu, izmantojiet karodziņu "-fsanitize=alloc-token".
  • Ar C valodu saistītās funkcijas:
    • Ir ieviesta specifikācijas melnraksta versija, kas definē atliktās izpildes mehānismu "defer", ļaujot izpildīt darbības, kad pašreizējais darbības joma tiek aizvērta. Lai iespējotu "defer" atbalstu, ir pievienots karodziņš "-fdefer-ts".
    • Pievienota iebūvētā funkcija __builtin_stack_address(), kas atspoguļo līdzīgu funkciju GCC. Šī funkcija atgriež kaudzes adresi, kas atdala pašreizējās funkcijas, kas izsauca __builtin_stack_address(), kaudzes apgabalu no nākamajām funkcijām, kuras tā izsauc.
  • Iespējas, kas tiek izstrādātas nākotnes C2y standartam:
    • Pievienots atbalsts nosauktajām cilpām, kas ļauj piešķirt nosaukumus cilpām un pārslēgšanas paziņojumiem, kurus var norādīt pārtraukuma un turpinājuma paziņojumos, lai skaidri definētu ciklu, no kura jāiziet. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // doties uz CONT1 continue outer; // doties uz CONT2 // CONT1 } // CONT2 }
    • Iebūvētā makro "__COUNTER__" ieviešana, kas paredzēta unikālu identifikatoru nosaukumu ģenerēšanai, ir paplašināta un iekļauta standartā. Šim makro ir iestatīts 2147483647 izsaukumu ierobežojums; šī ierobežojuma pārsniegšana radīs kļūdu.
    • Noņemts brīdinājums (-Wstatic-in-inline), lietojot statiskas funkcijas vai mainīgos funkcijās, kas deklarētas kā "extern inline".
  • C23 C standartā definētās iespējas:
    • Galvenes fails float.h tagad atbalsta makro FLT_SNAN, DBL_SNAN un LDBL_SNAN, kas ievieš signalizētas (aritmētiskajās operācijās radot izņēmumu) NaN vērtības float, double un long double tipiem.
    • Novērsta kļūda, kuras dēļ dažādi nenosaukti tipi tika uzskatīti par saderīgiem vienā tulkošanas vienībā, ja tiem bija vienādi lauki.
    • Karodziņš "-MG", ko izmanto, lai ignorētu trūkstošos galvenes failus atkarību skenēšanas laikā, ir paplašināts līdz "#embed" direktīvām un tagad novērš kļūdu "fails nav atrasts", ja trūkst "#embed" direktīvā norādītā faila.
  • Ar C++ saistītas funkcijas:
    • Ir pievienota iespēja izmantot strukturētas saistīšanas "constexpr" kontekstā, kā tas ir izstrādāts C++2c (C++26) specifikācijā. Tas nozīmē, ka atsauces uz konstantām izteiksmēm tagad pašas var būt konstantas izteiksmes. Ir ieviests atbalsts masīviem un vienkāršām struktūrām (tuples vēl netiek atbalstītas). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Kā to pieprasa C++20 standarts, ierobežojumi tagad tiek konvertēti standarta formā pirms pārbaudes, kas ļauj precīzākus diagnostikas ziņojumus un pareizi apstrādāt aizstāšanas kļūdas veidņu argumentos, kas tiek izmantoti tikai koncepcijas identifikatoros.
    • Pievienota iebūvēto funkciju saime "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship", lai noskaidrotu, vai salīdzināšanas operatori "<", ">", "<=" un ">=" tika sintezēti no operatora "<=>".
    • Parametrs "-Wincompatible-pointer-types" ir mainīts, lai brīdinājuma vietā parādītu kļūdu. Lai atgrieztos pie iepriekšējās darbības, izmantojiet opciju "-Wno-error=incompatible-pointer-types".
  • Pievienotas iebūvētās funkcijas __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 un __builtin_dedup_pack. Piemēram, builtin_dedup_pack ļauj noņemt dublikātus no tipu saraksta: izmantojot MyTypeList = TypeList<__builtin_dedup_pack. …>; // iegūtais tips būs TypeList
  • Atkļūdojot nedefinētu darbību ar UBSan (-fsanitize=undefined -fsanitize-trap=undefined), kļūdas cēloņa informācija tagad tiek iekļauta ģenerētajā atkļūdošanas informācijā. Ir pievienots karodziņš "-fsanitize-debug-trap-reasons", lai norādītu kļūdas informācijas detalizācijas līmeni. To var iestatīt uz "basic" vispārīgiem aprakstiem (piemēram, "veselo skaitļu saskaitīšanas pārpilde") un uz "detailed", lai iekļautu detalizētu informāciju (piemēram, "veselo skaitļu saskaitīšanas ar zīmi pārpilde 'a + b'").
  • Pievienoti jauni kompilatora karodziņi:
    • "-f[no-]sanitize-debug-trap-reasons", lai kontrolētu, vai izņēmumu slazdu iemesli tiek iestrādāti atkļūdošanas informācijā, kompilējot ar "-fsanitize-trap" režīmu.
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi" un "-fsanitize-alloc-token-extended", lai pārvaldītu atmiņas piešķiršanas marķierus.
    • "-fmatrix-memory-layout", lai kontrolētu matricu tipu atmiņas izkārtojumu (piemēram, column-major kolonnas-galvenajai kategorijai, row-major rindas-galvenajai kategorijai).
  • Funkcijām tagad ir atribūts "malloc_span", kas ir līdzīgs malloc atribūtam, bet attiecas uz funkcijām, kas atgriež span līdzīgas struktūras, kas satur rādītāju un lauku ar izmēru vai rādītāju uz bloka beigām.
  • Pievienots atribūts "modular_format", lai saistīšanas laikā dinamiski atlasītu nepieciešamo statiski saistīto printf funkcijas ieviešanu.
  • Ir paplašināti diagnostikas un statiskās analīzes rīki, pievienotas jaunas pārbaudes (vairāki desmiti ar diagnostiku saistītu uzlabojumu).
  • X86 aizmugursistēmai ir pievienotas papildu SSE, AVX un AVX512 paplašinājumu iekšējas iezīmes. Intel centrālajiem procesoriem, kuru pamatā ir Wildcat Lake (-march=wildcatlake) un Nova Lake (-march=novalake) mikroarhitektūras, ir pievienoti būvēšanas režīmi.
  • AArch64 aizmugursistēma tagad atbalsta Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) un Arm C1-Ultra (c1-ultra) procesorus. FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] un FCVTA[US] instrukcijām ir pievienotas papildu iebūvētās funkcijas. Ir stabilizēts funkciju vairākversiju (FMV) atbalsts. Lietotāji tagad var ignorēt dažādu funkciju versiju prioritāti.
  • Pievienots atbalsts LoongArch32 (LA32R, LA32S) arhitektūrai.
  • Uzlabotas ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly un PowerPC arhitektūru aizmugures sistēmas.

Avots: opennet.ru

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster