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

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

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 y reproducible, 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 instrucciones case, sufijos imaginarios i y j, 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 operador new.
  • 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 y std.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.

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *