Pubblicato il set di compilatori LLVM 19

Dopo sei mesi di sviluppo, è stata presentata la versione del progetto LLVM 19.1.0, che sviluppa strumenti (compilatori, ottimizzatori e generatori di codice) per compilare programmi in bytecode intermedio di istruzioni virtuali simili a RISC (una macchina virtuale a basso livello con un sistema di ottimizzazione multilivello). Il codice pseudogenere generato può essere trasformato in codice macchina per una piattaforma target specifica o utilizzato da un compilatore JIT per generare istruzioni macchina direttamente durante l'esecuzione del programma. Sulla base delle tecnologie LLVM, il progetto sviluppa il compilatore Clang, che supporta i linguaggi di programmazione C, C++ e Objective-C. A partire dalla scorsa versione, il progetto ha adottato un nuovo schema per la numerazione delle versioni, secondo il quale il rilascio iniziale ("N.0") è utilizzato durante lo sviluppo, mentre la prima versione stabile è contrassegnata con il numero "N.1".

Tra i miglioramenti in Clang 19:

  • Aggiunte le funzionalità definite nello standard C23:
    • supporto per l'uso del specificatore constexpr per la definizione degli oggetti;
    • macro INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX e LDBL_NORM_MAX in float.h;
    • meccanismo «#embed» per l'integrazione di risorse binarie;
    • tipo char8_t per stringhe e caratteri in UTF-8.
  • È stata implementata la realizzazione di tutte le funzionalità definite nello standard C++17. L'elemento finale è stata l'inclusione del supporto per gli elementi che abbinano i parametri di template con argomenti compatibili, che erano stati disattivati per impostazione predefinita a causa di problemi di compatibilità.
  • Nel modo C++14 è abilitato per impostazione predefinita il supporto per la funzione delete con specifica della dimensione (sized deallocation),
  • Sono state aggiunte funzionalità relative allo standard C++20: funzioni integrate __is_layout_compatible e __is_pointer_interconvertible_base_of; supporto completo per le espressioni per l'importazione di moduli; supporto iniziale per la deduzione automatica dei tipi degli argomenti del template di classe per i tipi alias creati tramite template (CTAD per Alias Template).
  • Sono state aggiunte funzionalità relative allo standard C++20: estensione della durata degli oggetti temporanei nei cicli che iterano su intervalli; assunzioni trasferibili; attenuazione dei vincoli per constexpr e disattivazione della diagnostica «-Winvalid-constexpr»; supporto per funzioni membro statiche ed esplicite di oggetti con elenchi di parametri identici.
  • Aggiunte funzionalità legate al futuro standard C++2c (C++26): indicizzazione dei pacchetti di parametri nei template; sintassi ‘= delete(«motivo»)’; attributi per le binding strutturate; divieto di binding di un glvalue restituito a un valore temporaneo; cicli infiniti banali senza comportamento non definito; generazione di errori quando si elimina un puntatore a un tipo incompleto; applicazione di vincoli nelle espressioni di folding («…»).
  • Sono stati aggiunti nuovi flag del compilatore:
    • «-fsanitize=implicit-bitfield-conversion» per verificare il troncamento implicito e la modifica del segno durante il lavoro con i bit field.
    • «-fsanitize=implicit-integer-conversion» per verificare le conversioni implicite degli interi.
    • «-Wmissing-designated-field-initializers» per identificare gli inizializzatori di campo mancanti.
    • «-fexperimental-modules-reduced-bmi» per abilitare un BMI (Binary Module Interface) ridotto per i moduli nominati di C++20, che consente l'uso dei moduli standard di C++.
    • «-fexperimental-late-parse-attribute» per abilitare il parsing tardivo degli attributi in contesti specifici, come l'attributo counted_by.
    • «-fseparate-named-sections» per creare sezioni uniche separate per simboli globali in sezioni speciali nominate.
    • «-fms-define-stdc» per la compatibilità di STDC con MSVC.
    • «-Wc++23-compat» e «-Wc++2c-compat» — gruppi di avvisi per semplificare la migrazione a C++23 e C++26.
    • «-fdisable-block-signature-string» per disabilitare la generazione di stringhe con firma per i blocchi.
    • «-fpointer-tbaa» per etichettare puntatori incompatibili, utilizzando l'analisi degli alias basata sui tipi (TBAA).
  • Aggiunti nuovi attributi: sized_by, counted_by_or_null, nonblocking, nonallocating, blocking, allocating, sized_by_or_null, amdgpu_max_num_work_groups(x, y, z).
  • Aggiunte nuove funzioni incorporate: __builtin_readsteadycounter, __builtin_popcountg, __builtin_clzg, __builtin_ctzg, __is_bitwise_cloneable.
  • Ampliate le strumenti di diagnostica e analisi statica, aggiunte nuove verifiche.

Le principali novità di LLVM 19:

  • Nel backend per l'architettura RISC-V è stata aggiunta la supporto sperimentale per le estensioni Zabha (operazioni atomiche in memoria), Ssqosid, Ssnpm, Smnpm, Smmpm, Sspm e Supm (uso di maschere per i puntatori), Zba, Zbb, Zbs. Supporto stabile per le estensioni Ztso, Zabha, Zaamo e Zalrsc.
  • Nel backend per l'architettura AArch64 è stata aggiunta la supporto per i processori Cortex-R82AE, Cortex-A78AE, Cortex-A520AE, Cortex-A720AE, Cortex-A725, Cortex-X925, Neoverse-N3, Neoverse-V3 e Neoverse-V3AE.
  • Nel backend per l'architettura ARM è stata aggiunta la supporto per il processore Cortex-R52+.
  • Migliorati i backend per le architetture X86, LoongArch, WebAssembly, MIPS, PowerPC e AMDGPU.
  • Le funzionalità del linker LLD sono state ampliate. Sono stati aggiunti nuovi tipi di spostamenti (relocations): CREL, GNU_PROPERTY_AARCH64_FEATURE_PAUTH, R_AARCH64_AUTH_ABS64 e R_AARCH64_AUTH_RELATIVE. È stato inserito il parametro «—compress-sections ={none,zlib,zstd}[:level]» per scegliere l'algoritmo di compressione delle sezioni.
  • Nella libreria Libc++ continua l'implementazione delle funzionalità degli standard C++20, C++23 e C++26.
  • Le richieste sulla versione di Python necessaria per compilare LLVM sono state aumentate da 3.6 a 3.8.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster