GCC 14.1 ya fue liberado y estas son sus novedades
La nueva versión de GCC 14.1 ya fue liberada y entre sus mejoras y cambios que más se destacan, la nueva versión ofrece mejoras en el análisis estático, asi como también mejoras de seguridad, mejoras de optimización de rendimiento, mejoras en la biblioteca de tiempo de ejecución libstdc++, entre otras cosas más.
GCC 14.1 se etiqueta como el primer lanzamiento importante de la nueva rama GCC 14.x y siguiendo el esquema de numeración de versiones, durante el desarrollo se utilizó la versión 14.0 y, poco antes del lanzamiento de GCC 14.1, ya se había dividido la rama GCC 15.0, a partir de la cual se formaría la próxima versión principal, GCC 15.1.
¿Qué hay de nuevo en GCC 14.1?
En esta nueva versión de GCC 14.1 se han mejorado el análisis estático para el lenguaje C a través de la opción «-fanalyzer», es que en el análisis de operaciones con cadenas se ha agregado detección de bucles infinitos con «-Wanalyzer-infinite-loop» y se han añadido advertencias específicas para problemas de validación de entradas con «-Wanalyzer-tainted-*«. La advertencia «-Wanalyzer-out-of-bounds» también ha sido mejorada para detectar desbordamientos de búfer, además, se ha ampliado el soporte para el formato SARIF a través de la opción -fdiagnostics-format=, lo que facilita la generación de informes detallados para análisis estáticos más avanzados.
Otra de las novedades que presenta GCC 14.1 son las mejoras en la biblioteca de tiempo de ejecución libstdc++, ya que se ha agregado soporte para funcionalidades como std::stacktrace y std::format, así como para operaciones de entrada/salida optimizadas a través de std::print y std::println.
Además, se han introducido nuevas capacidades para el manejo de punteros inteligentes con std::out_ptr y std::inout_ptr, así como mejoras en herramientas de conversión como std::to_string y std::to_wstring, brindando a los desarrolladores un conjunto más completo de herramientas para el manejo de datos y operaciones de formato.
Se han añadido funciones relacionadas con C++23, tales como el soporte para el mecanismo «Deducing this», que permite el uso de parámetros con el atributo «this» en plantillas y averigua la categoría de la expresión para la cual se llama la función de una clase, también se ha implementado de un requisito que convierte todas las funciones que llaman a funciones con el atributo consteval en funciones consteval
También se añadieron características relacionadas con C++26, por ejemplo, es posible usar cadenas literales en un contexto en el que no se usan para inicializar una matriz de caracteres y no terminan en el código resultante, también se agregó la capacidad de usar múltiples variables de marcador de posición con el nombre «_» y las conversiones implícitas de valores enumerados en cálculos aritméticos han quedado obsoletas.
De los demás cambios y mejoras que se introdujeron en GCC 14.1:
- Nuevas opciones como «–enable-host-pie» para compilar archivos ejecutables en modo PIE y «–enable-host-bind-now» para opciones de enlace adicionales.
- Se agregó la opción «-finline-stringops» para habilitar la expansión en línea de funciones como memcmp, memcpy, memmove y memset, incluso cuando no son necesarias para la optimización.
- Se han realizado mejoras significativas en el soporte para OpenMP con la inclusión de opciones como -fopenmp-allocators y directivas como defaultmap y indirect.
- Se agregó soporte inicial para la versión preliminar de la especificación OpenMP 6.0 y se continuó con la implementación de los estándares OpenMP 5.0, 5.1 y 5.2.
- Se mejoró la implementación de las especificaciones de programación paralela OpenACC 2.7 y 3.2 para descargar operaciones en GPU y procesadores especializados como NVIDIA PTX.
- Mejora del soporte de libstdc++ para los estándares C++20, C++23 y C++26.
- La compatibilidad con la extensión GCC que permitía especificar un miembro de matriz flexible no al final de una estructura se ha vuelto obsoleta
- Ampliación del soporte del backend de la arquitectura AArch64 para diferentes CPU y extensiones como Arm SME y SME2.
- Se añadió soporte para CPU Cortex-M52 en el backend de la arquitectura ARM.
- Se añadió soporte para CPU AMD basadas en el núcleo Zen 5 y otras arquitecturas de Intel
- Mejoras de soporte para LoongArch, AVR y RISC-V.
- Mejoras en la salida de diagnóstico en formato SARIF basado en JSON para obtener resultados de análisis estáticos y advertencias.
- Para el código C compilado según estándares más recientes que C89, algunas construcciones derivadas de C99 ahora producen errores en lugar de advertencias para mejorar la detección de problemas potenciales.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.