Linux Adictos Darkcrizt  

LLVM 16.0 y fue liberado y estas son sus novedades

LLVM Logo

LLVM es una marco para el desarrollo de compiladores ademas de que ayuda a construir nuevos lenguajes de programación y mejorar los lenguajes existentes

Después de poco más de seis meses de desarrollo, se dio a conocer el lanzamiento de la nueva versión del proyecto LLVM 16.0, versión en la que se implementan una gran cantidad de cambios y mejoras.

Para quienes desconocen de LLVM, deben saber que este es un compilador compatible con GCC (compiladores, optimizadores y generadores de código) que compila programas en un código de bits intermedio de instrucciones virtuales tipo RISC (una máquina virtual de bajo nivel con un sistema de optimización multinivel).

El pseudocódigo generado puede ser convertido por el compilador JIT en instrucciones de máquina justo en el momento de la ejecución del programa.

Principales novedades de LLVM 16.0

En esta nueva versión que se presenta, podremos encontrar diversas mejoras importantes en Clang 16.0, de las cuales de destaca el estándar C++/ObjC++ predeterminado que se establece en gnu++17 (anteriormente gnu++14), lo que implica soporte para funciones de C++17 con extensiones GNU de forma predeterminada. En el código LLVM se permite el uso de elementos definidos en el estándar C++17.

Otro de los cambios que se destaca, es que se ha agregado soporte para CPU Cortex-A715, Cortex-X3 y Neoverse V2, extensiones Armv8.3 y funciones de versiones múltiples al backend AArch64.
La compatibilidad con las plataformas Armv2, Armv2A, Armv3 y Armv3M se suspendió en el backend de la arquitectura ARM, para el cual no se garantizaba la generación correcta de código. Se agregó la capacidad de generar código para instrucciones para trabajar con números complejos y se agregó soporte para arquitecturas de conjuntos de instrucciones (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT al backend X86.

Ademas de ello, se han aumentado los requisitos para construir LLVM, ademas de que la compilación ahora debería ser compatible con el estándar C++ 17, es decir, la compilación requiere al menos GCC 7.1, Clang 5.0, Apple Clang 10.0 o Visual Studio 2019 16.7.

Por otra parte, tambien se destacan los backends mejorados para arquitecturas MIPS, PowerPC y RISC-V, asi como tambien el soporte para depurar ejecutables de 64 bits para la arquitectura LoongArch al depurador LLDB y el manejo mejorado de los símbolos de depuración COFF.

De los demás cambios que se destacan:

  • En la biblioteca Libc++ , el trabajo principal se centró en implementar soporte para nuevas características de los estándares C++20 y C++23.
  • El tiempo de enlace se ha reducido significativamente en el enlazador LDD al paralelizar el escaneo de reubicación de direcciones y las operaciones de inicialización de secciones. Se agregó soporte para la compresión de secciones usando el algoritmo ZSTD.
  • Tambien se destacan las funciones avanzadas implementadas con el estándar C++20.
  • capturar enlaces estructurados en funciones lambda.
  • El operador de igualdad dentro de expresiones.
  • Capacidad para no especificar la palabra clave typename en algunos contextos,
  • Permisibilidad de la inicialización agregada entre paréntesis («Aggr(val1, val2)»).
  • Funciones implementadas definidas en el futuro estándar C++2b.
  • Compatibilidad proporcionada con el tipo char8_t,
  • Se amplió el rango de caracteres permitidos para su uso en «\N{…}»,
  • Se agregó la capacidad de usar variables declaradas como «static constexpr» en funciones declaradas como constexpr.
  • Funciones implementadas definidas en el futuro estándar C2x C:
  • Se agregó soporte para cargar múltiples archivos de configuración (los archivos de configuración predeterminados se cargan primero y luego los especificados mediante el indicador «–config=», que ahora se puede especificar varias veces).
  • Se modificó el orden de carga de los archivos de configuración predeterminados: clang primero intenta cargar el archivo <triple>-<driver>.cfg y, si no lo encuentra, intenta cargar dos archivos <driver>.cfg y <triple>.cfg.
  • Se agregó un nuevo indicador de compilación «-fcoro-aligned-allocation» para la distribución alineada de marcos de rutina.
  • Se agregó el indicador «-fmodule-output» para habilitar el modelo de compilación monofásico de los módulos estándar de C++ .
  • Se agregó el modo «-Rpass-analysis=stack-frame-layout» para diagnosticar problemas con el diseño del marco de pila.
  • Se agregó un nuevo atributo __attribute__((target_version(«cpu_features»))) y se amplió la funcionalidad del atributo __attribute__((target_clones(«cpu_features1″,»cpu_features2»,…))) para seleccionar versiones específicas de funciones proporcionadas por la CPU AArch64 .
  • Herramientas de diagnóstico mejoradas:
  • Se agregó la advertencia «-Wsingle-bit-bitfield-constant-conversion» para detectar el truncamiento implícito al asignar uno a un campo de bits con signo de un bit.
  • Diagnóstico extendido de variables constexpr no inicializadas.
  • Se agregaron advertencias «-Wcast-function-type-strict» y «-Wincompatible-function-pointer-types-strict» para detectar posibles problemas al transmitir tipos de función.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.