Ħruġ tas-suite tal-kompilaturi LLVM 22

Wara sitt xhur ta' żvilupp, ġiet rilaxxata LLVM 22.1.0. Din tiżviluppa għodod (kompilaturi, ottimizzaturi, u ġeneraturi tal-kodiċi) li jikkompilaw programmi f'bitcode intermedju ta' struzzjonijiet virtwali simili għal RISC (magna virtwali ta' livell baxx b'sistema ta' ottimizzazzjoni b'ħafna livelli). Il-psewdokodiċi ġġenerat jista' jiġi kkonvertit f'kodiċi tal-magna għal pjattaforma fil-mira partikolari jew użat minn kompilatur just-in-time (JIT) biex jiġġenera struzzjonijiet tal-magna direttament waqt l-eżekuzzjoni tal-programm. Abbażi tat-teknoloġiji LLVM, il-proġett qed jiżviluppa l-kompilatur Clang, li jappoġġja l-lingwi ta' programmar C, C++, u Objective-C. Mill-fergħa 18.x, il-proġett qaleb għal skema ġdida ta' numerazzjoni tal-verżjonijiet, li skontha tintuża r-rilaxx 0 ("N.0") waqt l-iżvilupp, u l-ewwel verżjoni stabbli hija nnumerata "N.1."

It-titjib f'Clang 22 jinkludi:

  • Żied l-appoġġ għat-tokens tal-allokazzjoni tal-memorja (Allocation Tokens) għall-immarkar tal-operazzjonijiet tal-allokazzjoni tal-memorja mwettqa bl-użu ta' funzjonijiet bħal malloc b'identifikatur uniku. It-tokens tal-allokazzjoni jippermettu l-istrutturar tal-informazzjoni tal-heap, is-simplifikazzjoni tal-iskoperta tat-tnixxija tal-memorja, u l-abilitazzjoni tal-grupp ta' oġġetti bbażati fuq l-iskop jew ix-xejriet ta' modifika tagħhom (eż., is-separazzjoni tad-dejta "sħuna" mid-dejta "kiesħa"). Biex tippermetti dan, uża l-bandiera "-fsanitize=alloc-token".
  • Karatteristiċi relatati mal-lingwa C:
    • Ġiet implimentata abbozz ta' speċifikazzjoni li tiddefinixxi l-mekkaniżmu ta' eżekuzzjoni differita "defer", li jippermetti li l-azzjonijiet jiġu eżegwiti meta l-ambitu attwali jintemm. Il-bandiera "-fdefer-ts" ġiet miżjuda biex tippermetti l-appoġġ ta' "defer".
    • Il-funzjoni integrata __builtin_stack_address() ġiet miżjuda, u tirrifletti l-funzjoni simili fil-GCC. Din il-funzjoni tirritorna l-indirizz tal-istack li jissepara ż-żona tal-istack tal-funzjoni attwali li sejħet __builtin_stack_address() u l-funzjonijiet sussegwenti li ssejjaħ.
  • Kapaċitajiet li qed jiġu żviluppati għall-istandard C2y futur:
    • Żied l-appoġġ għal-linji msemmija, li jippermettilek tassenja ismijiet lil-linji u dikjarazzjonijiet switch, li jistgħu jiġu speċifikati fid-dikjarazzjonijiet break u continue biex jiddefinixxu b'mod espliċitu l-linja minn fejn toħroġ. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // mur f'CONT1 continue outer; // mur f'CONT2 // CONT1 } // CONT2 }
    • L-implimentazzjoni tal-makro integrat "__COUNTER__", iddisinjat biex jiġġenera ismijiet ta' identifikaturi uniċi, ġiet estiża u inkluża fl-istandard. Ġie stabbilit limitu ta' 2147483647 sejħa għal dan il-makro; jekk jinqabeż dan il-limitu, dan jiġġenera żball.
    • Tneħħiet it-twissija (-Wstatic-in-inline) meta jintużaw funzjonijiet statiċi jew varjabbli ġewwa funzjonijiet iddikjarati bħala "extern inline".
  • Kapaċitajiet definiti fl-istandard C23 C:
    • Il-fajl tal-intestatura float.h issa jappoġġja l-makros FLT_SNAN, DBL_SNAN, u LDBL_SNAN, li jimplimentaw valuri NaN sinjalati (li jikkawżaw eċċezzjoni meta jintużaw f'operazzjonijiet aritmetiċi) għat-tipi float, double, u long double.
    • Irranġajna bug fejn tipi differenti mingħajr isem kienu qed jiġu ttrattati bħala kompatibbli fl-istess unità ta' traduzzjoni jekk kellhom l-istess oqsma.
    • Il-bandiera "-MG" użata biex tinjora fajls tal-intestatura neqsin waqt l-iskennjar tad-dipendenza ġiet estiża għad-direttivi "#embed" u issa trażżan l-iżball "fajl mhux misjub" meta fajl speċifikat f'direttiva "#embed" ikun nieqes.
  • Karatteristiċi relatati mas-C++:
    • Ġiet miżjuda l-abbiltà li jintużaw rabtiet strutturati fil-kuntest "constexpr", kif żviluppat fl-ispeċifikazzjoni C++2c (C++26). Dan ifisser li r-referenzi għal espressjonijiet kostanti issa jistgħu huma stess ikunu espressjonijiet kostanti. L-appoġġ huwa implimentat għal arrays u strutturi sempliċi (it-tuples għadhom mhumiex appoġġjati). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Kif meħtieġ mill-istandard C++20, ir-restrizzjonijiet issa huma konvertiti għal forma standard qabel ma jiġu ċċekkjati, u b'hekk jippermettu messaġġi dijanjostiċi aktar preċiżi u mmaniġġjar xieraq ta' żbalji ta' sostituzzjoni f'argumenti ta' template użati biss f'concept-ids.
    • Żidna familja ta' funzjonijiet integrati "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" biex niskopru jekk l-operaturi ta' tqabbil "<", ">", "<=", u ">=" ġewx sintetizzati mill-operatur "<=>".
    • Il-parametru "-Wincompatible-pointer-types" inbidel biex joħroġ żball minflok twissija. Biex terġa' lura għall-imġieba preċedenti, uża l-għażla "-Wno-error=incompatible-pointer-types".
  • Żidna l-funzjonijiet integrati __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, u __builtin_dedup_pack. Pereżempju, builtin_dedup_pack jippermettilek tneħħi duplikati minn lista ta' tipi: billi tuża MyTypeList = TypeList<__builtin_dedup_pack ...>; // it-tip li jirriżulta se jkun TypeList
  • Meta tiġi debugging imġieba mhux definita b'UBSan (-fsanitize=undefined -fsanitize-trap=undefined), l-informazzjoni dwar il-kawża tal-iżball issa hija inkluża fl-informazzjoni ta' debug iġġenerata. Il-bandiera "-fsanitize-debug-trap-reasons" ġiet miżjuda biex tispeċifika l-livell ta' dettall fl-informazzjoni tal-iżball. Tista' tiġi ssettjata għal "bażika" għal deskrizzjonijiet ġenerali (eż., "Żieda ta' numru sħiħ żejda") u "dettaljata" biex tinkludi informazzjoni dettaljata (eż., "żieda ta' numru sħiħ żejda f''a + b'").
  • Miżjuda bnadar ġodda tal-kompilaturi:
    • "-f[no-]sanitize-debug-trap-reasons" biex tikkontrolla jekk ir-raġunijiet tan-nassa tal-eċċezzjoni humiex inkorporati fl-informazzjoni tad-debug meta tiġi kkompilata bil-modalità "-fsanitize-trap".
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", u "-fsanitize-alloc-token-extended" biex jimmaniġġjaw it-tokens tal-allokazzjoni tal-memorja.
    • "-fmatrix-memory-layout" biex tikkontrolla t-tqassim tal-memorja tat-tipi ta' matriċi (eż. column-major għal column-major, row-major għal row-major).
  • Il-funzjonijiet issa għandhom attribut "malloc_span", simili għall-attribut malloc iżda applikabbli għal funzjonijiet li jirritornaw strutturi simili għal span li fihom pointer u qasam bid-daqs jew pointer għat-tmiem tal-blokk.
  • Żidna l-attribut "modular_format" biex nagħżlu b'mod dinamiku l-implimentazzjoni meħtieġa marbuta statikament tal-funzjoni printf fil-ħin tal-konnessjoni.
  • L-għodod dijanjostiċi u tal-analiżi statika ġew estiżi, u ġew miżjuda kontrolli ġodda (bosta għexieren ta' titjib relatat mad-dijanjostika).
  • Ġew miżjuda intrinsiċi addizzjonali għall-estensjonijiet SSE, AVX, u AVX512 mal-backend X86. Ġew miżjuda modi ta' bini għal CPUs Intel ibbażati fuq il-mikroarkitetturi Wildcat Lake (-march=wildcatlake) u Nova Lake (-march=novalake).
  • Il-backend tal-AArch64 issa jappoġġja l-proċessuri Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium), u Arm C1-Ultra (c1-ultra). Ġew miżjuda funzjonijiet integrati addizzjonali għall-istruzzjonijiet FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], u FCVTA[US]. L-appoġġ għall-Function Multi-Versioning (FMV) ġie stabbilizzat. L-utenti issa jistgħu jegħlbu l-prijorità ta' verżjonijiet ta' funzjonijiet differenti.
  • Żied l-appoġġ għall-arkitettura LoongArch32 (LA32R, LA32S).
  • Backends imtejba għall-arkitetturi ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly, u PowerPC.

Sors: opennet.ru

Ixtri hosting affidabbli għal siti bi protezzjoni DDoS, servers VPS VDS 🔥 Ixtri hosting ta' websajts affidabbli bi protezzjoni DDoS, servers VPS VDS | ProHoster