GCC 12.1 ya fue liberado y estas son sus novedades
Después de un año de desarrollo se lanzó el paquete de compilación GCC 12.1, el primer lanzamiento significativo en la nueva rama GCC 12.x.
Bajo el nuevo esquema de numeración de versiones, se usó la versión 12.0 durante el desarrollo, y poco antes del lanzamiento de GCC 12.1, la rama GCC 13.0 ya estaba bifurcada, a partir de la cual se formará la próxima versión importante de GCC 13.1.
Principales novedades de GCC 12.1
En esta nueva versión que se presenta, se destaca que se agregó el soporte para el formato de depuración CTF, que proporciona almacenamiento compacto de información sobre tipos C, relaciones entre funciones y símbolos de depuración. Cuando está incrustado en objetos ELF, el formato permite el uso de tablas de símbolos EFL para evitar la duplicación de datos.
Ademas de ello, se destaca que se continúa trabajando para ampliar la compatibilidad con futuros estándares C2X y C++23 para C y C++ y que ademas la compatibilidad con las secciones experimentales de los estándares C++20 y C++23 se ha mejorado en la biblioteca estándar de C++.
Para la arquitectura x86, se añadio protección adicional contra vulnerabilidades en los procesadores causadas por la ejecución especulativa de instrucciones después de operaciones de salto hacia adelante incondicionales. El problema surge del procesamiento preventivo de las instrucciones que siguen inmediatamente a la instrucción de salto en la memoria (SLS, Straight Line Speculation). Se sugiere la opción «-mharden-sls» para habilitar la protección.
Tambien se destaca que se agregó una definición para el uso de variables no inicializadas al analizador estático experimental. Se agregó soporte inicial para analizar código ensamblador en inserciones en línea. Seguimiento de memoria mejorado. Código reescrito para manejar expresiones de cambio.
Se agregaron 30 nuevas llamadas a libgccjit, una biblioteca compartida para incorporar un generador de código en otros procesos y usarlo para la compilación de código de bytes JIT a código nativo.
Por otra parte, se destaca que se añadió el soporte para el mecanismo CO-RE (Compilar una vez – Ejecutar en todas partes) al backend para generar bytecode BPF, que permite compilar el código de los programas eBPF para el kernel de Linux solo una vez y usar un cargador universal especial que adapta el programa cargado al kernel actual y tipos BTF (formato tipo BPF). CO-RE resuelve el problema con la portabilidad de los programas eBPF compilados que anteriormente solo podían usarse en la versión del kernel para la que fueron construidos, ya que la posición de los elementos en las estructuras de datos varía de una versión a otra.
Se ha agregado al backend RISC-V soporte para las nuevas extensiones de arquitectura de conjuntos de instrucciones zba, zbb, zbc y zbs, así como extensiones ISA para operaciones criptográficas vectoriales y escalares. La compatibilidad con la especificación RISC-V ISA 20191213 se proporciona de forma predeterminada . Se agregó el indicador -mtune=thead-c906 para habilitar las optimizaciones para los núcleos T-HEAD c906.
Se agregó compatibilidad con el tipo __int128_t/integer(kind=16) al backend de generación de código para las GPU AMD basadas en la microarquitectura GCN. Es posible utilizar hasta 40 grupos de trabajo por unidad de cómputo (CU) y hasta 16 frentes de instrucción (frente de onda, un conjunto de hilos ejecutados en paralelo por el SIMD Engine) por grupo. Anteriormente, solo se permitía un borde de instrucción por CU.
Los indicadores «-march», «-mptx» y «-march-map» se agregaron al backend NVPTX, diseñado para la generación de código utilizando la arquitectura de conjunto de instrucciones NVIDIA PTX (Parallel Thread Execution). Soporte implementado para PTX ISA sm_53, sm_70, sm_75 y sm_80. La arquitectura predeterminada es sm_30.
Ademas de ello se destaca que se solucionó un problema por el cual el compilador realizaba una búsqueda no calificada de una expresión de operador dependiente en el momento de la definición de la plantilla en lugar de en el momento de la creación de instancias. Esta solución coincide con el comportamiento existente para las expresiones de llamadas dependientes.
Cabe mencionar que el 23 de mayo, el proyecto celebrará 35 años desde la formación del primer lanzamiento de GCC. Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.