Liberazione di a suite di compilatori LLVM 22

Dopu à sei mesi di sviluppu, LLVM 22.1.0 hè statu liberatu. Sviluppa strumenti (compilatori, ottimizzatori è generatori di codice) chì compilanu prugrammi in bitcode intermediu d'istruzzioni virtuali di tipu RISC (una macchina virtuale di bassu livellu cù un sistema d'ottimizazione multilivellu). U pseudocodice generatu pò esse cunvertitu in codice macchina per una data piattaforma di destinazione o adupratu da un compilatore just-in-time (JIT) per generà istruzzioni macchina direttamente durante l'esecuzione di u prugramma. Basatu annantu à e tecnulugie LLVM, u prugettu sviluppa u compilatore Clang, chì supporta i linguaggi di prugrammazione C, C++ è Objective-C. Partendu da a branca 18.x, u prugettu hè passatu à un novu schema di numerazione di e versioni, secondu u quale a versione 0 ("N.0") hè aduprata durante u sviluppu, è a prima versione stabile hè numerata "N.1".

I miglioramenti in Clang 22 includenu:

  • Aggiuntu u supportu per i gettoni di allocazione di memoria (Allocation Tokens) per marcà l'operazioni di allocazione di memoria eseguite cù funzioni cum'è malloc cù un identificatore unicu. I gettoni di allocazione permettenu di strutturà l'infurmazioni di l'heap, simplificà a rilevazione di perdite di memoria è attivà u raggruppamentu di l'uggetti secondu u so scopu o mudelli di mudificazione (per esempiu, separà i dati "caldi" da quelli "freddi"). Per attivà, aduprate a bandera "-fsanitize=alloc-token".
  • Funziunalità relative à a lingua C:
    • Una specificazione preliminare chì definisce u mecanismu d'esecuzione differita "defer" hè stata implementata, chì permette l'esecuzione di l'azzioni quandu u scopu attuale finisce. L'indicatore "-fdefer-ts" hè statu aghjuntu per attivà u supportu "defer".
    • A funzione integrata __builtin_stack_address() hè stata aghjunta, riflettendu a funzione simile in GCC. Sta funzione restituisce l'indirizzu di stack chì separa l'area di stack di a funzione attuale chì hà chjamatu __builtin_stack_address() è e funzioni successive ch'ella chjama.
  • Capacità in sviluppu per u futuru standard C2y:
    • Aggiuntu u supportu per i cicli numinati, chì vi permette d'assignà nomi à i cicli è à l'istruzzioni switch, chì ponu esse specificate in l'istruzzioni break è continue per definisce esplicitamente u ciclu da u quale esce. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // andate à CONT1 continue outer; // andate à CONT2 // CONT1 } // CONT2 }
    • L'implementazione di a macro integrata "__COUNTER__", cuncipita per generà nomi d'identificatori unichi, hè stata allargata è inclusa in u standard. Hè statu stabilitu un limite di 2147483647 chjamate à sta macro; superà stu limite genererà un errore.
    • Avvertimentu (-Wstatic-in-inline) eliminatu quandu si utilizanu funzioni statiche o variabili in funzioni dichjarate cum'è "extern inline".
  • Capacità definite in u standard C23 C:
    • U schedariu d'intestazione float.h supporta avà e macro FLT_SNAN, DBL_SNAN è LDBL_SNAN, chì implementanu valori NaN segnalati (chì causanu una eccezione quandu sò usati in operazioni aritmetiche) per i tipi float, double è long double.
    • Hè statu currettu un bug induve diversi tipi senza nome eranu trattati cum'è cumpatibili in a listessa unità di traduzzione s'elli avianu i stessi campi.
    • L'indicatore "-MG" utilizatu per ignurà i fugliali d'intestazione mancanti durante a scansione di e dipendenze hè statu allargatu à e direttive "#embed" è avà sopprime l'errore "fugliale micca trovu" quandu un fugliale specificatu in una direttiva "#embed" manca.
  • Funziunalità relative à C++:
    • Hè stata aghjunta a capacità d'utilizà ligami strutturati in u cuntestu "constexpr", cum'è sviluppatu in a specificazione C++2c (C++26). Questu significa chì i riferimenti à espressioni custanti ponu avà esse elli stessi espressioni custanti. U supportu hè implementatu per array è strutture simplici (e tuple ùn sò ancu supportate). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Cum'è previstu da u standard C++20, i vincoli sò avà cunvertiti in forma standard prima di esse verificati, ciò chì permette missaghji diagnostichi più precisi è una gestione curretta di l'errori di sustituzione in l'argumenti di u mudellu utilizati solu in l'ID di cuncettu.
    • Aghjunta una famiglia di funzioni integrate "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" per scopre se l'operatori di paragone "<", ">", "<=" è ">=" sò stati sintetizzati da l'operatore "<=>".
    • U parametru "-Wincompatible-pointer-types" hè statu mudificatu per dà un errore invece di un avvertimentu. Per vultà à u cumpurtamentu precedente, aduprate l'opzione "-Wno-error=incompatible-pointer-types".
  • Funzioni integrate aghjunte __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, è __builtin_dedup_pack. Per esempiu, builtin_dedup_pack permette di rimuovere i duplicati da una lista di tipi: aduprendu MyTypeList = TypeList<__builtin_dedup_pack …>; // u tipu risultante serà TypeList
  • Quandu si debuga un cumpurtamentu indefinitu cù UBSan (-fsanitize=undefined -fsanitize-trap=undefined), l'infurmazioni nantu à a causa di l'errore sò avà incluse in l'infurmazioni di debug generate. L'indicatore "-fsanitize-debug-trap-reasons" hè statu aghjuntu per specificà u livellu di dettagliu in l'infurmazioni d'errore. Pò esse impostu à "basicu" per descrizzioni generali (per esempiu, "Addizione di numeri interi traboccata") è "dettagliatu" per include informazioni dettagliate (per esempiu, "addizione di numeri interi cù segnu traboccata in 'a + b'").
  • Aggiunti novi bandieri di compilatore:
    • "-f[no-]sanitize-debug-trap-reasons" per cuntrullà se e ragioni di e trappole d'eccezzione sò integrate in l'infurmazioni di debug quandu si compila cù a modalità "-fsanitize-trap".
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi", è "-fsanitize-alloc-token-extended" per gestisce i gettoni di allocazione di memoria.
    • "-fmatrix-memory-layout" per cuntrullà a dispusizione di memoria di i tipi di matrice (per esempiu, column-major per column-major, row-major per row-major).
  • E funzioni anu avà un attributu "malloc_span", simile à l'attributu malloc ma applicabile à e funzioni chì restituiscenu strutture simili à span chì cuntenenu un puntatore è un campu cù a dimensione o un puntatore à a fine di u bloccu.
  • Aghjuntu l'attributu "modular_format" per selezziunà dinamicamente l'implementazione ligata staticamente necessaria di a funzione printf à u mumentu di u ligame.
  • L'arnesi di diagnostica è d'analisi statica sò stati allargati, sò stati aghjunti novi cuntrolli (parechje decine di miglioramenti ligati à a diagnostica).
  • Sò state aghjunte caratteristiche intrinseche supplementari per l'estensioni SSE, AVX è AVX512 à u backend X86. Sò state aghjunte modalità di compilazione per e CPU Intel basate nantu à e microarchitetture Wildcat Lake (-march=wildcatlake) è Nova Lake (-march=novalake).
  • U backend AArch64 supporta avà i processori Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) è Arm C1-Ultra (c1-ultra). Funzioni integrate supplementari sò state aghjunte per l'istruzzioni FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] è FCVTA[US]. U supportu di Function Multi-Versioning (FMV) hè statu stabilizatu. L'utilizatori ponu avà sovrascrive a priorità di diverse versioni di funzioni.
  • Aggiuntu u supportu per l'architettura LoongArch32 (LA32R, LA32S).
  • Backend migliorati per l'architetture ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly è PowerPC.

Source: opennet.ru

Cumprate un hosting affidabile per i siti cù prutezzione DDoS, servitori VPS VDS 🔥 Cumprate un hosting di siti web affidabile cù prutezzione DDoS, servitori VPS VDS | ProHoster