Tras un año de intenso desarrollo, se ha anunciado oficialmente el lanzamiento de GCC 15.1, la primera versión estable de la nueva rama 15.x del compilador GNU. Esta versión no solo da inicio a la serie GCC 15, sino que también marca el comienzo del desarrollo de GCC 16, ya que se ha bifurcado en paralelo la rama 16.0, que sentará las bases de la futura versión mayor, GCC 16.1.
Principales novedades de GCC 15.1
Uno de los cambios más significativos en esta versión es la adopción del estándar C23 como predeterminado para la compilación de código en C, mediante la opción -std=gnu23
. Este nuevo estándar reemplaza al anterior C17 (-std=gnu17
) e introduce diversas novedades, como la constante nullptr
, el tipo _BitInt(n)
, y las palabras clave bool
, true
y false
, que podrían entrar en conflicto con identificadores en código heredado.
Entre las nuevas características del lenguaje C también se incluyen:
- La nueva directiva
#embed
para incrustar datos binarios. - Atributos como
unsequenced
yreproducible
, que ofrecen mayor control sobre el orden de ejecución y la generación de resultados constantes. - Elementos anticipados del futuro estándar C2Y, como declaraciones de variables en condiciones
if
, rangos en instruccionescase
, sufijos imaginariosi
yj
, y operadores++
y--
aplicados a números complejos.
Mejoras en C++ y avances hacia C++26
En el ámbito de C++, GCC 15.1 incorpora funciones propuestas para C++26, como:
- El operador
friend
con mayor flexibilidad. - Uso extendido de
constexpr
con variantes del operadornew
. - Mejora de la sintaxis en enlaces estructurados.
- Nuevos atributos como
[[musttail]]
, que garantiza la optimización de recursión en cola.
También se amplía la compatibilidad con C++23, incluyendo:
- Reglas mejoradas para
export
. - Mejor manejo de objetos temporales.
- Implementación experimental de los módulos
std
ystd.compat
en libstdc++. - Mayor seguridad en la inicialización de uniones.
- Mejoras de rendimiento gracias a un sistema de hash más eficiente para plantillas.
Análisis estático y nuevas advertencias
El sistema de análisis estático ha sido rediseñado visualmente y ahora incluye:
- Símbolos gráficos para destacar problemas.
- Recomendaciones para migrar a C23.
- Una nueva biblioteca llamada libgdiagnostics, que permite reutilizar la lógica de diagnóstico en otros proyectos.
- Soporte para informes en formato SARIF, facilitando la integración con herramientas modernas.
Además, se han añadido nuevas advertencias:
-Wanalyzer-undefined-behavior-ptrdiff
: para detectar restas entre punteros no relacionados.-Wtrailing-whitespace
y-Wleading-whitespace
: para identificar espacios en blanco innecesarios.-Wheader-guard
: para detectar errores en protecciones de inclusión de encabezados.
Optimizaciones y mejoras de rendimiento
GCC 15.1 introduce diversas optimizaciones destacadas:
- Compilación incremental para LTO (Link-Time Optimization), acelerando recompilaciones cuando los cambios son mínimos.
- Mejor vectorización de bucles, incluso cuando el tamaño de las matrices no es conocido en tiempo de compilación.
- Mayor eficiencia en la compilación de archivos de gran tamaño.
Ampliación del soporte de hardware y lenguajes
En cuanto al soporte de arquitecturas, se incluyen:
- Extensiones ARMv8 en AArch64.
- Compatibilidad con nuevas CPUs: Apple M3, Cortex-X925 y NVIDIA Grace.
- Mejoras en la plataforma MinGW.
- Soporte experimental para GPUs AMD Radeon de las series gfx9, gfx10.3 y gfx11.
- Soporte para AVX10.2 y nuevas instrucciones AMX en arquitecturas x86.
- Fin del soporte para Xeon Phi Knights.
También se incorporan nuevos lenguajes y estándares:
- gcobol, un compilador para COBOL con soporte en arquitecturas x86-64 y AArch64.
- Una versión actualizada del lenguaje D (2.111.0).
- Soporte para enteros sin signo en Fortran.
- Avances en la adopción de OpenMP de las versiones 5.0 a 6.0, con mejoras en interoperabilidad y uso de memoria unificada en GPU.