Noticia GCC 15.1 da el salto a C23 y suma mejoras en C++, optimizaciones y mas

gcc


Después de un año de intenso desarrollo, se dio a conocer el lanzamiento de la nueva versión de «GCC 15.1», la cual se posiciona como la primera versión estable dentro de la nueva rama 15.x de esta popular suite de compiladores de código abierto.

Este lanzamiento no solo inaugura oficialmente la serie GCC 15, sino que también marca el comienzo de la preparación para GCC 16, ya que la rama 16.0 ha sido bifurcada en paralelo y sentará las bases de la próxima versión mayor, GCC 16.1.

Principales novedades de GCC 15.1​


Uno de los cambios más relevantes en esta versión es que GCC 15.1 adopta el estándar C23 como predeterminado para la compilación de código en C, utilizando la opción -std=gnu23. Esta actualización reemplaza al anterior estándar por defecto, C17 (-std=gnu17), e introduce una serie de novedades del nuevo estándar. Entre ellas, se encuentra la constante nullptr, el tipo _BitInt(n), y las palabras clave bool, true y false, que podrían generar conflictos con identificadores existentes en código legado.

Otra de las novedades que incorpora GCC 15.1, es la directiva #embed para incrustar datos binarios, y atributos como unsequenced y reproducible, que aportan mayor control sobre el orden de ejecución y la determinación de resultados constantes. Además, se han implementado elementos del futuro estándar C2Y, como variables declaradas dentro de condiciones if, rangos de valores en instrucciones case, sufijos imaginarios i y j, y soporte para operadores ++ y — aplicados a números complejos.

Mejoras en C++ y el futuro C++26​


En el caso del lenguaje C++, GCC 15.1 implementa características que se están debatiendo para el estándar C++26, ya que se introducen novedades como el operador «friend», el uso de constexpr con variantes del operador new, y mejoras en la sintaxis para enlaces estructurados y atributos como musttail para recursión en cola garantizada.

La compatibilidad con C++23 también se amplía con nuevas reglas para el uso de export, mejoras en el manejo de objetos temporales y una implementación experimental de los módulos std y std.compat en libstdc++. Asimismo, se refuerza la seguridad en la inicialización de uniones y se mejora la compilación de código gracias a un sistema más eficiente de hash para plantillas.

Nuevas advertencias y mejoras en el análisis estático​


El sistema de análisis estático recibió un rediseño visual que destaca problemas mediante símbolos, consejos para migrar a C23, y una nueva biblioteca libgdiagnostics que permite reutilizar la lógica de diagnóstico en otros proyectos. También se introduce soporte para generar informes en formato SARIF, facilitando la integración con herramientas modernas de análisis de código.

A las advertencias existentes se suman nuevas, como –Wanalyzer-undefined-behavior-ptrdiff para detectar restas entre punteros no relacionados, –Wtrailing-whitespace y -Wleading-whitespace para señalar espacios en blanco innecesarios, y –Wheader-guard para detectar errores en las protecciones de inclusión de encabezados.

Optimizaciones y soporte​


Entre las optimizaciones destacadas, se incluye un modo de compilación incremental para LTO (Link-Time Optimization), pensado para acelerar recompilaciones cuando los cambios son mínimos. También se mejora la vectorización de bucles, incluso en casos donde el tamaño de las matrices no se conoce en tiempo de compilación, y se incrementa la velocidad en la compilación de archivos muy grandes.

Por la parte del soporte, se ha añadido en AArch64 las extensiones ARMv8, compatibilidad con nuevas CPUs como Apple M3, Cortex-X925 y NVIDIA Grace, y se extiende la plataforma MinGW. La generación de código para GPUs AMD Radeon se refuerza con compatibilidad experimental para nuevas series gfx9, gfx10.3 y gfx11. Para la arquitectura x86, se habilita soporte para AVX10.2 y nuevas instrucciones AMX, y se da de baja el soporte para los Xeon Phi Knights.

Además, GCC 15.1 introduce un compilador para COBOL (gcobol), con soporte para las arquitecturas x86-64 y AArch64, y una implementación actualizada del lenguaje D (versión 2.111.0). Se añade soporte para enteros sin signo en Fortran y se avanza en la adopción de OpenMP 5.0 a 6.0, incluyendo mejoras de interoperabilidad y uso de memoria unificada en GPU.

Continúar leyendo...