Se publica el conjunto de compiladores LLVM 19

Luego de seis meses de desarrollo, se presentó el lanzamiento del proyecto LLVM 19.1.0, que desarrolla herramientas (compiladores, optimizadores y generadores de código) que compilan programas en código de bits intermedio de instrucciones virtuales tipo RISC (una máquina virtual de bajo nivel con un -sistema de optimización de nivel). El pseudocódigo generado puede convertirse en código de máquina para una plataforma de destino determinada o ser utilizado por un compilador JIT para generar instrucciones de máquina directamente durante la ejecución del programa. Basado en tecnologías LLVM, el proyecto desarrolla el compilador Clang, que admite los lenguajes de programación C, C++ y Objective-C. A partir de la última rama, el proyecto cambió a un nuevo esquema para generar números de versión, según el cual se utiliza la versión cero (“N.0”) en el proceso de desarrollo y la primera versión estable se suministra con el número “N. .1”.

Las mejoras en Clang 19 incluyen:

  • Funciones agregadas definidas en el estándar C C23:
    • soporte para usar el especificador constexpr para definir objetos;
    • macros INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX y LDBL_NORM_MAX en float.h;
    • el mecanismo “#embed” para integrar recursos binarios;
    • Tipo char8_t para cadenas y caracteres en UTF-8.
  • Se garantiza la implementación de todas las funciones definidas en el estándar C++17. El último paso fue habilitar la compatibilidad con elementos para hacer coincidir los parámetros de la plantilla con argumentos compatibles, que estaban deshabilitados de forma predeterminada debido a problemas de compatibilidad existentes.
  • En el modo C++ 14, la compatibilidad con la función de eliminación con desasignación de tamaño está habilitada de forma predeterminada.
  • Funciones agregadas relacionadas con el estándar C++ 20: funciones integradas __is_layout_compatible y __is_pointer_interconvertible_base_of; soporte completo para expresiones para importar módulos; soporte inicial para la detección automática de tipos de argumentos de plantilla de clase para alias de tipo creados usando plantillas (CTAD para Alias ​​​​Template).
  • Funciones agregadas relacionadas con el estándar C++ 20: extender la vida útil de los objetos temporales en bucles que iteran sobre rangos; supuestos transferibles; aflojar las restricciones de constexpr y deshabilitar el diagnóstico "-Winvalid-constexpr"; soporte para funciones miembro estáticas y explícitas de objetos con las mismas listas de parámetros.
  • Funciones agregadas relacionadas con el futuro estándar C++2c (C++26): indexación de un paquete de parámetros en plantillas; sintaxis '= eliminar("razón"'); atributos para enlaces estructurados; prohibición de vincular el glvalue devuelto a un valor temporal; bucles infinitos triviales sin comportamiento indefinido; mostrar un error al eliminar un puntero a un tipo incompleto; aplicar restricciones en expresiones de plegado (“…”).
  • Se agregaron nuevas banderas del compilador:
    • "-fsanitize=implicit-bitfield-conversion" para comprobar el truncamiento implícito y la inversión de signos cuando se trabaja con campos de bits.
    • "-fsanitize=implicit-integer-conversion" para comprobar si hay conversiones de enteros implícitas.
    • "-Wmissing-designated-field-initializers" para detectar inicializadores de campo faltantes.
    • "-fexperimental-modules-reduced-bmi" para habilitar un BMI (interfaz de módulo binario) reducido para módulos con nombre C++20, lo que permite el uso de módulos C++ estándar.
    • "-fexperimental-late-parse-attribute" para habilitar el análisis tardío de atributos en contextos específicos, como el atributo counted_by.
    • "-fseparate-named-sections" para crear secciones únicas separadas para símbolos globales en secciones especiales con nombre.
    • "-fms-define-stdc" para compatibilidad STDC con MSVC.
    • "-Wc++23-compat" y "-Wc++2c-compat" son grupos de advertencias para simplificar la migración a C++23 y C++26.
    • "-fdisable-block-signature-string" para deshabilitar la generación de cadena de firma para bloques.
    • "-fpointer-tbaa" para marcar punteros incompatibles mediante análisis de alias basado en tipos (TBAA).
  • Se agregaron nuevos atributos: sized_by, counted_by_or_null, nonblocking, nonallocating, blocking, allocating, sized_by_or_null, amdgpu_max_num_work_groups(x, y, z).
  • Se agregaron nuevas funciones integradas: __builtin_readsteadycounter, __builtin_popcountg, __builtin_clzg, __builtin_ctzg, __is_bitwise_cloneable.
  • Se han ampliado las herramientas de diagnóstico y análisis estático y se han añadido nuevas comprobaciones.

Innovaciones clave en LLVM 19:

  • En el backend de la arquitectura RISC-V, se ha agregado soporte experimental para las extensiones Zabha (operaciones de memoria atómica), Ssqosid, Ssnpm, Smnpm, Smmpm, Sspm y Supm (usando máscaras de puntero), Zba, Zbb, Zbs. Se ha estabilizado el soporte para las extensiones Ztso, Zabha, Zaamo y Zalrsc.
  • El backend de la arquitectura AArch64 agrega soporte para los procesadores Cortex-R82AE, Cortex-A78AE, Cortex-A520AE, Cortex-A720AE, Cortex-A725, Cortex-X925, Neoverse-N3, Neoverse-V3 y Neoverse-V3AE.
  • Se agregó compatibilidad con el procesador Cortex-R52+ al backend de la arquitectura ARM.
  • Backends mejorados para arquitecturas X86, LoongArch, WebAssembly, MIPS, PowerPC y AMDGPU.
  • Se han ampliado las capacidades del enlazador LLD. Se agregaron nuevos tipos de reubicaciones: CREL, GNU_PROPERTY_AARCH64_FEATURE_PAUTH, R_AARCH64_AUTH_ABS64 y R_AARCH64_AUTH_RELATIVE. Se agregó el parámetro "--compress-sections" ={none,zlib,zstd}[:level]" para seleccionar el algoritmo de compresión de la sección.
  • La biblioteca Libc++ continúa implementando las capacidades de los estándares C++20, C++23 y C++26.
  • De 3.6 a 8, se aumentaron los requisitos para la versión de Python necesaria para compilar LLVM.

Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster