GCC 12.1 ya fue liberado conoce sus novedades y su 35° aniversario
El lanzamiento de la nueva versión del compilador GCC (GNU Compiler Collection ) 12.1 ya fue dado a conocer y como en todas las versiones principales de GCC, esta versión traerá muchas adiciones, mejoras, correcciones de errores y nuevas características, ademas de que en este mes (23 de mayo), el proyecto celebrará 35 años desde la formación del primer lanzamiento.
GCC 12 ya es el compilador del sistema para Fedora 36, ademas de que GCC 12 también estará disponible en Red Hat Enterprise Linux en Red Hat Developer Toolset (versión 7) o Red Hat GCC Toolset (versiones 8 y 9).
Los desarrolladores de GCC se enorgullecen de anunciar otro lanzamiento importante de GCC, 12.1.
Este año celebramos el 35 aniversario de la primera versión beta de GCC
¡y este mes celebraremos 35 años desde el lanzamiento de GCC 1.0!Esta versión deja de admitir el formato de depuración STABS y
introduce soporte para el formato de depuración CTF [1]. El C y C++
las interfaces continúan avanzando con la ampliación del soporte para funciones
en los próximos estándares C2X y C++23 y la biblioteca estándar de C++
mejora el soporte para las partes experimentales de C++20 y C++23.
La interfaz de Fortran ahora es totalmente compatible con TS 29113 para la interoperabilidad con C.
¿Que hay de nuevo en GCC 12.1?
En esta nueva versión se han implementado varias propuestas, como por ejemplo para los lenguajes C y C++, se agregó una función incorporada __builtin_dynamic_object_size para determinar el tamaño de un objeto, compatible con una función similar de Clang.
Se agregó soporte para el atributo «unavailable» para los lenguajes C y C++ (por ejemplo, puede marcar funciones que darán como resultado un error cuando se usan), asi como tambien se agregó compatibilidad con las directivas de preprocesamiento «#elifdef» y «#elifndef» para los lenguajes C y C++.
Tambien se destaca que se agregó el indicador «-Wbidi-chars» para advertir si los caracteres UTF-8 se usan incorrectamente, cambiando el orden de visualización del texto bidireccional, asi como tambien el indicador «-Warray-compare» para emitir una advertencia al intentar comparar dos operandos que se refieren a matrices.
Ademas de ello se destaca la implementación de los estándares OpenMP 5.0 y 5.1 (Open Multi-Processing), que definen API y métodos para aplicar métodos de programación paralela en sistemas multinúcleo e híbridos (CPU + GPU / DSP) con memoria compartida y unidades de vectorización (SIMD), fue continuado.
Tambien la implementación mejorada de la especificación de programación paralela OpenACC 2.6, que define los medios para descargar operaciones en GPU y procesadores especializados como NVIDIA PTX y que se agregó compatibilidad con las instrucciones extendidas de Intel AVX512-FP16 y el tipo _Float16 al backend de generación de código x86.
El front-end de Fortran brinda soporte completo para la especificación TS 29113 , que describe las posibilidades para garantizar la portabilidad entre Fortran y el código C.
Soporte en desuso para el formato de almacenamiento de información de depuración » STABS » creado en la década de 1980.
Se agregó soporte para la extensión __builtin_shufflevector(vec1, vec2, index1, index2, …) agregada previamente a Clang, que ofrece una sola llamada para realizar operaciones de reproducción aleatoria y reproducción aleatoria de vectores comunes.
Cuando se usa el nivel de optimización «-O2″, la vectorización está habilitada de manera predeterminada (los modos -ftree-vectorize y -fvect-cost-model=very-cheap están habilitados). El modelo » muy barato » permite la vectorización solo si el código vectorial puede reemplazar completamente al código escalar vectorizable.
Se agregó el modo «-ftrivial-auto-var-init» para habilitar la inicialización explícita de variables en la pila para rastrear problemas y bloquear vulnerabilidades asociadas con el uso de variables no inicializadas.
Se ha agregado la implementación de funciones C integradas en el compilador (Intrinsics) para la carga atómica y el almacenamiento de datos en la memoria, basado en el uso de instrucciones ARM extendidas (ls64). Se agregó soporte para acelerar las funciones memcpy, memmove y memset usando la extensión ARM mopoption.
Se agregó un nuevo modo de verificación «-fsanitize=shadow-call-stack» ( ShadowCallStack ), que actualmente solo está disponible para la arquitectura AArch64 y funciona cuando se compila código con la opción «-ffixed-r18». El modo brinda protección contra la reescritura de la dirección de retorno de la función en caso de desbordamiento del búfer en la pila. La esencia de la protección es guardar la dirección de retorno en una pila «sombra» separada después de la transferencia de control a la función y recuperar esta dirección antes de salir de la función.
Fuente: https://gcc.gnu.org/pipermail