Publicat el conjunt de compiladors LLVM 19

Després de sis mesos de desenvolupament, es va presentar el llançament del projecte LLVM 19.1.0, desenvolupant eines (compiladors, optimitzadors i generadors de codi) que compilen programes en codi de bits intermedi d'instruccions virtuals semblants a RISC (una màquina virtual de baix nivell amb un -Sistema d'optimització de nivell). El pseudocodi generat es pot convertir en codi màquina per a una plataforma objectiu determinada o utilitzar-lo per un compilador JIT per generar instruccions de màquina directament durant l'execució del programa. Basat en tecnologies LLVM, el projecte està desenvolupant el compilador Clang, que admet els llenguatges de programació C, C++ i Objective-C. A partir de l'última branca, el projecte va canviar a un nou esquema per generar números de versió, segons el qual s'utilitza la versió zero ("N.0") en el procés de desenvolupament i la primera versió estable es subministra amb el número "N". .1”.

Les millores a Clang 19 inclouen:

  • Característiques afegides definides a l'estàndard C C23:
    • suport per utilitzar l'especificador constexpr per definir objectes;
    • macros INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX i LDBL_NORM_MAX en float.h;
    • el mecanisme “#embed” per integrar recursos binaris;
    • escriviu char8_t per a cadenes i caràcters en UTF-8.
  • Es garanteix la implementació de totes les característiques definides a l'estàndard C++17. El pas final va ser habilitar el suport per als elements per fer coincidir els paràmetres de la plantilla amb arguments compatibles, que estaven desactivats per defecte a causa de problemes de compatibilitat existents.
  • En el mode C++ 14, el suport per a la funció de supressió amb la desassignació de mida està activat per defecte,
  • S'han afegit funcions relacionades amb l'estàndard C++20: funcions integrades __is_layout_compatible i __is_pointer_interconvertible_base_of; suport complet per a expressions per importar mòduls; suport inicial per a la detecció automàtica dels tipus d'arguments de plantilla de classe per als àlies de tipus creats amb plantilles (CTAD per a la plantilla d'àlies).
  • Característiques afegides relacionades amb l'estàndard C++20: allargar la vida útil dels objectes temporals en bucles que iteren en intervals; supòsits transferibles; afluixant les restriccions de constexpr i desactivant el diagnòstic "-Winvalid-constexpr"; suport per a funcions membre estàtiques i explícites d'objectes amb les mateixes llistes de paràmetres.
  • Característiques afegides relacionades amb el futur estàndard C++2c (C++26): indexació d'un paquet de paràmetres en plantilles; sintaxi '= delete("raó"'); atributs per a enllaços estructurats; prohibició d'enllaçar el glvalue retornat a un valor temporal; bucles infinits trivials sense comportament indefinit; mostrar un error en suprimir un punter a un tipus incomplet; aplicant restriccions a les expressions de plec (“…”).
  • S'han afegit nous indicadors del compilador:
    • "-fsanitize=implicit-bitfield-conversion" per comprovar si hi ha un truncament implícit i una inversió de signes quan es treballa amb camps de bits.
    • "-fsanitize=implicit-integer-conversion" per comprovar si hi ha conversions d'enteres implícites.
    • "-Wmissing-designated-field-initializers" per detectar inicialitzadors de camps que falten.
    • "-fexperimental-modules-reduced-bmi" per habilitar un IMC (Interfície de mòdul binari) reduït per a mòduls amb nom C++20, permetent l'ús de mòduls C++ estàndard.
    • "-fexperimental-late-parse-attribute" per habilitar l'anàlisi tardana d'atributs en contextos específics, com ara l'atribut counted_by.
    • "-fseparate-named-sections" per crear seccions úniques separades per a símbols globals en seccions especials amb nom.
    • "-fms-define-stdc" per a la compatibilitat STDC amb MSVC.
    • "-Wc++23-compat" i "-Wc++2c-compat" són grups d'advertiments per simplificar la migració a C++23 i C++26.
    • "-fdisable-block-signature-string" per desactivar la generació de cadena de signatura per als blocs.
    • "-fpointer-tbaa" per marcar punters incompatibles mitjançant l'anàlisi d'àlies basada en tipus (TBAA).
  • S'han afegit atributs nous: sized_by, counted_by_or_null, no blocking, no allocation, blocking, allooting, sized_by_or_null, amdgpu_max_num_work_groups(x, y, z).
  • S'han afegit noves funcions integrades: __builtin_readsteadycounter, __builtin_popcountg, __builtin_clzg, __builtin_ctzg, __is_bitwise_cloneable.
  • S'han ampliat les eines de diagnòstic i d'anàlisi estàtica, s'han afegit noves comprovacions.

Innovacions clau en LLVM 19:

  • Al backend de l'arquitectura RISC-V, s'ha afegit suport experimental per a les extensions Zabha (operacions de memòria atòmica), Ssqosid, Ssnpm, Smnpm, Smmpm, Sspm i Supm (utilitzant màscares de punter), Zba, Zbb, Zbs. S'ha estabilitzat el suport per a les extensions Ztso, Zabha, Zaamo i Zalrsc.
  • El backend per a l'arquitectura AArch64 afegeix suport per als processadors Cortex-R82AE, Cortex-A78AE, Cortex-A520AE, Cortex-A720AE, Cortex-A725, Cortex-X925, Neoverse-N3, Neoverse-V3 i Neoverse-V3AE.
  • S'ha afegit suport per al processador Cortex-R52+ al backend per a l'arquitectura ARM.
  • Backends millorats per a arquitectures X86, LoongArch, WebAssembly, MIPS, PowerPC i AMDGPU.
  • S'han ampliat les capacitats de l'enllaç LLD. S'han afegit nous tipus de reubicacions: CREL, GNU_PROPERTY_AARCH64_FEATURE_PAUTH, R_AARCH64_AUTH_ABS64 i R_AARCH64_AUTH_RELATIVE. S'ha afegit el paràmetre "--compress-sections". ={none,zlib,zstd}[:level]" per seleccionar l'algorisme de compressió de la secció.
  • La biblioteca Libc++ continua implementant les capacitats dels estàndards C++20, C++23 i C++26.
  • De la 3.6 a la 8, s'han augmentat els requisits per a la versió de Python necessària per construir LLVM.

Font: opennet.ru

Compreu allotjament fiable per a llocs amb protecció DDoS, servidors VPS VDS 🔥 Compra allotjament web fiable amb protecció DDoS, servidors VPS VDS | ProHoster