Lanzamiento del conjunto de compiladores GCC 13

Después de un año de desarrollo, se lanzó el conjunto de compiladores gratuitos GCC 13.1, el primer lanzamiento importante en la nueva rama GCC 13.x. Según el nuevo esquema de numeración de versiones, durante el desarrollo se utilizó la versión 13.0 y, poco antes del lanzamiento de GCC 13.1, ya se bifurcó la rama GCC 14.0, a partir de la cual se formará la próxima versión importante de GCC 14.1.

Cambios importantes:

  • El GCC adoptó una interfaz para crear programas en el lenguaje de programación Modula-2. Admite códigos de construcción que se ajustan a los dialectos PIM2, PIM3 y PIM4, así como al estándar ISO aceptado para ese idioma.
  • Se ha agregado al árbol fuente de GCC una interfaz con la implementación del compilador del lenguaje Rust preparado por el proyecto gccrs (GCC Rust). En la vista actual, el frontend está marcado como experimental y deshabilitado de forma predeterminada. Una vez que la interfaz esté lista (se espera en la próxima versión), el kit de herramientas estándar GCC se puede usar para compilar programas Rust sin la necesidad de instalar el compilador Rustc creado con desarrollos LLVM.
  • Link-in-Step Optimization (LTO) agrega soporte para un servidor de trabajos (servidor de trabajos) mantenido por el proyecto GNU make para optimizar la ejecución de compilación paralela en múltiples subprocesos. En GCC, el servidor de trabajos se utiliza para paralelizar el trabajo durante la optimización LTO en el contexto de todo el programa (WPA, Whole-program Analysis). Las canalizaciones con nombre (--jobserver-style=fifo) se utilizan de forma predeterminada para interactuar con el servidor de trabajos.
  • El analizador estático (-fanalyzer) ofrece 20 nuevas comprobaciones de diagnóstico, incluidas "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite -recursión" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Se ha implementado la capacidad de generar diagnósticos en formato SARIF basado en JSON. El nuevo formato se puede utilizar para obtener resultados de análisis estáticos (GCC -fanalyzer), así como para obtener información sobre advertencias y errores. La habilitación se realiza con la opción "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", donde las opciones con "json" generan resultados en una variante específica de GCC del formato JSON. .
  • Implementó algunas características definidas en el estándar C23 C, como la constante nullptr para definir punteros nulos, facilitando el uso de listas con un número variable de argumentos (variadic), ampliando las capacidades de las enumeraciones, el atributo noreturn, permitiendo el uso de constexpr y auto al definir objetos, typeof y typeof_unqual, nuevas palabras clave aligns, alignof, bool, false, static_assert, thread_local y true, permiten paréntesis vacíos en la inicialización.
  • Implementadas algunas características definidas en el estándar C++23, como la capacidad de colocar marcas al final de expresiones compuestas, compatibilidad con el tipo char8_t, la directiva de preprocesador #warning, delimitada por (\u{}, \o{} , \x{}) y secuencias de escape con nombre ('\N{LETRA A MAYÚSCULA LATINA}'), operador estático(), operador estático[], operador de igualdad dentro de expresiones, excepción de algunas restricciones en el uso de constexpr, UTF -8 soporte en textos fuente.
  • Soporte experimental mejorado para los estándares C++20 y C++23 en libstdc++, como agregar soporte para archivos de encabezado y std::format, capacidades extendidas de archivo de encabezado , se agregaron tipos de punto flotante adicionales, se implementaron archivos de encabezado Y .
  • Se agregaron nuevos atributos de función para documentar que un descriptor de archivo se pasa en una variable entera: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" y "__attribute__((fd_arg_write(N) )) ". Los atributos especificados se pueden utilizar en un analizador estático (-fanalyzer) para detectar trabajos incorrectos con descriptores de archivos.
  • Se ha agregado un nuevo atributo "__attribute__((assume(EXPR)))", con el cual puedes decirle al compilador que la expresión es verdadera y el compilador puede usar este hecho sin evaluar la expresión.
  • Se agregó el indicador "-fstrict-flex-arrays=[nivel]" para seleccionar el comportamiento al procesar un elemento de matriz flexible en estructuras (miembros de matriz flexible, una matriz de tamaño indefinido al final de la estructura, por ejemplo, "int b[] ").
  • Se agregó el indicador "-Wenum-int-mismatch" para emitir advertencias si hay una discrepancia entre un tipo enumerado y un tipo entero.
  • La interfaz de Fortran tiene soporte total para la finalización.
  • Se agregó soporte para funciones y tipos genéricos (genéricos) a la interfaz del lenguaje Go y se aseguró la compatibilidad con paquetes para el lenguaje Go 1.18.
  • El backend de AArch64 admite CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) y Arm Neoverse V2 (neoverse -v2) . Se ha agregado compatibilidad con los argumentos "armv9.1-a", "armv9.2-a" y "armv9.3-a" a la opción "-march=". Se agregó soporte para las extensiones de procesador FEAT_LRCPC, FEAT_CSSC y FEAT_LSE2.
  • Se ha agregado compatibilidad con las CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) y Arm Cortex-M85 (cortex-m85) al backend de la arquitectura ARM.
  • Se ha agregado compatibilidad con los procesadores Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids y AMD Zen 86 (znver4) al backend x4. Se han implementado las extensiones de arquitectura de conjunto de instrucciones AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT y AMX-COMPLEX propuestas en los procesadores Intel. Para C y C++ en sistemas con SSE2, se proporciona el tipo __bf16.
  • El backend de generación de código para las GPU AMD Radeon (GCN) implementa la capacidad de utilizar aceleradores AMD Instinct MI200 para mejorar el rendimiento de OpenMP/OpenACC. Vectorización mejorada mediante instrucciones SIMD.
  • Capacidades de backend significativamente ampliadas para la plataforma LoongArch.
  • Se agregó soporte para XuanTie C906 (thead-c906) de CPU T-Head en el backend RISC-V. Se implementó soporte para controladores de vectores definidos en la especificación RISC-V Vector Extension Intrinsic 0.11. Se agregó soporte para 30 extensiones de especificación RISC-V.
  • Al generar objetos compartidos con la opción "-shared", el código de inicio ya no se agrega después de agregar un entorno de punto flotante si las optimizaciones "-Ofast", "-ffast-math" o "-funsafe-math-optimizations" están habilitadas. .
  • La compatibilidad con el formato de depuración DWARF se implementa en casi todas las configuraciones.
  • Se agregó la opción "-gz=zstd" para comprimir la información de depuración usando el algoritmo Zstandard. Se eliminó la compatibilidad con el modo de compresión de información de depuración obsoleto "-gz=zlib-gnu".
  • Se ha añadido soporte inicial para OpenMP 5.2 (Open Multi-Processing) y se ha continuado con la implementación de los estándares OpenMP 5.0 y 5.1, definiendo APIs y métodos para aplicar métodos de programación paralela en sistemas multinúcleo e híbridos (CPU + GPU / DSP) con Unidades de memoria compartida y vectorización (SIMD).
  • Se ha descontinuado el soporte para el formato heredado de almacenamiento de información de depuración "STABS" (habilitado por las opciones -gstabs y -gxcoff), creado en la década de 1980 y utilizado en el depurador dbx.
  • Soporte obsoleto para Solaris 11.3 (el código para admitir esta plataforma se eliminará en una versión futura).

Fuente: opennet.ru

Añadir un comentario