LLVM 16.0 i va ser alliberat i aquestes són les seves novetats

LLVM Logo

LLVM és un marc per al desenvolupament de compiladors a més que ajuda a construir nous llenguatges de programació i millorar els llenguatges existents

Després de poc més de sis mesos de desenvolupament, es va donar a conèixer el llançament de la nova versió de el projecte LLVM 16.0, versió en què s'implementen una gran quantitat de canvis i millores.

Per als que desconeixen de LLVM, han de saber que aquest és un compilador compatible amb GCC (compiladors, optimitzadors i generadors de codi) que compila programes en un codi de bits intermedi d'instruccions virtuals tipus RISC (una màquina virtual de baix nivell amb un sistema d'optimització multinivell).

El pseudocodi generat pot ser convertit pel compilador JIT en instruccions de màquina just al moment de l'execució del programa.

Principals novetats de LLVM 16.0

En aquesta nova versió que es presenta, podrem trobar diverses millores importants a Clang 16.0, de les quals destaca l'estàndard C++/ObjC++ predeterminat que s'estableix a gnu++17 (anteriorment gnu++14), cosa que implica suport per a funcions de C++17 amb extensions GNU per defecte. Al codi LLVM es permet l'ús d'elements definits a l'estàndard C++17.

Un altre dels canvis que es destaca és que s'ha afegit suport per a CPU Cortex-A715, Cortex-X3 i Neoverse V2, extensions Armv8.3 i funcions de versions múltiples al backend AArch64.
La compatibilitat amb les plataformes Armv2, Armv2A, Armv3 i Armv3M es va suspendre al backend de l'arquitectura ARM, per al qual no es garantia la correcta generació de codi. S'ha afegit la capacitat de generar codi per a instruccions per treballar amb nombres complexos i s'ha afegit suport per a arquitectures de conjunts d'instruccions (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT al backend X86.

A més d'això, s'han augmentat els requisits per construir LLVM, a més que la compilació ara hauria de ser compatible amb l'estàndard C++ 17, és a dir, la compilació requereix almenys GCC 7.1, Clang 5.0, Apple Clang 10.0 o Visual Studio 2019 16.7.

D'altra banda, també es destaquen els backends millorats per a arquitectures MIPS, PowerPC i RISC-V, així com també el suport per depurar executables de 64 bits per a l'arquitectura LoongArch al depurador LLDB i el maneig millorat dels símbols de depuració COFF.

Dels altres canvis que es destaquen:

  • A la biblioteca Libc++, el treball principal es va centrar a implementar suport per a noves característiques dels estàndards C++20 i C++23.
  • El temps d'enllaç s'ha reduït significativament a l'enllaçador LDD en paral·lelitzar l'escaneig de reubicació d'adreces i les operacions d'inicialització de seccions. S'ha afegit suport per a la compressió de seccions usant l'algorisme ZSTD.
  • També destaquen les funcions avançades implementades amb l'estàndard C++20.
  • capturar enllaços estructurats en funcions lambda.
  • Loperador digualtat dins dexpressions.
  • Capacitat per no especificar la paraula clau typename en alguns contextos,
  • Permissibilitat de la inicialització agregada entre parèntesis («Aggr(val1, val2)»).
  • Funcions implementades definides al futur estàndard C++2b.
  • Compatibilitat proporcionada amb el tipus char8_t,
  • Es va ampliar el rang de caràcters permesos per al seu ús a «\N{…}»,
  • Es va afegir la capacitat d'usar variables declarades com a «static constexpr» en funcions declarades com a constexpr.
  • Funcions implementades definides en el futur estàndard C2x C:
  • S'ha afegit suport per carregar múltiples fitxers de configuració (els fitxers de configuració predeterminats es carreguen primer i després els especificats mitjançant l'indicador “–config=”, que ara es pot especificar diverses vegades).
  • Es va modificar l'ordre de càrrega dels fitxers de configuració predeterminats: primer clang intenta carregar el fitxer - .cfg i, si no el trobeu, intenteu carregar dos fitxers .cfg i .cfg.
  • S'ha afegit un nou indicador de compilació "-fcoro-aligned-allocation" per a la distribució alineada de marcs de rutina.
  • S'ha afegit l'indicador -fmodule-output per habilitar el model de compilació monofàsic dels mòduls estàndard de C++ .
  • S'ha afegit el mode "-Rpass-analysis=stack-frame-layout" per diagnosticar problemes amb el disseny del marc de pila.
  • S'ha afegit un nou atribut __attribute__((target_version("cpu_features"))) i s'ha ampliat la funcionalitat de l'atribut __attribute__((target_clones("cpu_features1","cpu_features2")) per seleccionar versions específiques de funcions proporcionades per la CPU AArch64 .
  • Eines de diagnòstic millorades:
  • S'ha afegit l'advertència "-Wsingle-bit-bitfield-constant-conversion" per detectar el truncament implícit en assignar un a un camp de bits amb signe d'un bit.
  • Diagnòstic estès de variables constexpr no inicialitzades.
  • S'han afegit advertències "-Wcast-function-type-strict" i "-Wincompatible-function-pointer-types-strict" per detectar possibles problemes en transmetre tipus de funció.

Finalment si estàs interessat en poder conèixer més a l'respecte, pots consultar els detalls al següent enllaç.


Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.