Lanzamento do conxunto de compiladores GCC 13

Despois dun ano de desenvolvemento, lanzouse a versión gratuíta do conxunto de compiladores GCC 13.1, a primeira versión significativa da nova rama GCC 13.x. Baixo o esquema de numeración do novo lanzamento, utilizouse a versión 13.0 durante o desenvolvemento, e pouco antes do lanzamento de GCC 13.1, xa se bifurcou a rama GCC 14.0, a partir da cal se formará a próxima versión significativa de GCC 14.1.

Principais cambios:

  • O GCC adoptou un frontend para construír programas na linguaxe de programación Modula-2. Admite códigos de construción que se axustan aos dialectos PIM2, PIM3 e PIM4, así como ao estándar ISO aceptado para ese idioma.
  • Engadiuse á árbore de fontes de GCC un frontend coa implementación do compilador da linguaxe Rust preparado polo proxecto gccrs (GCC Rust). Na vista actual, o forntend está marcado como experimental e está desactivado por defecto. Unha vez que o frontend estea listo (espérase na próxima versión), o kit de ferramentas GCC estándar pódese usar para compilar programas Rust sen necesidade de instalar o compilador rustc construído mediante desenvolvementos LLVM.
  • Link-in-Step Optimization (LTO) engade soporte para un servidor de traballos (jobserver) mantido polo proxecto GNU make para optimizar a execución de compilación paralela en varios fíos. En GCC, o jobserver úsase para paralelizar o traballo durante a optimización de LTO no contexto de todo o programa (WPA, Análise de todo o programa). As canalizacións con nome (--jobserver-style=fifo) úsanse por defecto para comunicarse co jobserver.
  • O analizador estático (-fanalyzer) ofrece 20 novas comprobacións de diagnóstico, incluíndo "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinito -recursión" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Implementouse a capacidade de emitir diagnósticos en formato SARIF baseado en JSON. O novo formato pódese utilizar para obter resultados de análises estáticas (GCC -fanalyzer), así como para obter información sobre avisos e erros. A activación realízase coa opción "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", onde as opcións con "json" dan como resultado unha variante específica de GCC do formato JSON .
  • Implementáronse algunhas características definidas no estándar C23 C, como a constante nullptr para definir punteiros nulos, facilitando o uso de listas cun número variable de argumentos (variadic), ampliando as capacidades de enums, o atributo noreturn, permitindo o uso de constexpr e auto ao definir obxectos, o typeof e typeof_unqual, as novas palabras clave aliñas, alignof, bool, false, static_assert, thread_local e true, permiten parénteses baleiros na inicialización.
  • Implementáronse algunhas características definidas no estándar C++23, como a capacidade de poñer marcas ao final de expresións compostas, a compatibilidade co tipo char8_t, a directiva do preprocesador #warning, delimitada por (\u{}, \o{} , \x{}) e denominadas ('\N{LETRA MAIÚSCULA LATINA}') secuencias de escape, operador estático(), operador estático[], operador de igualdade dentro de expresións, a excepción dalgunhas restricións no uso de constexpr, soporte para UTF-8 nos textos fonte.
  • Compatibilidade experimental mellorada para os estándares C++20 e C++23 en libstdc++, como engadir soporte para ficheiros de cabeceira e std::format, capacidades de ficheiro de cabeceira estendidas , tipos de coma flotante adicionais engadidos, ficheiros de cabeceira implementados E .
  • Engadíronse novos atributos de función para documentar que se pasa un descritor de ficheiro nunha variable enteira: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" e "__attribute__((fd_arg_write(N)) ))". Os atributos especificados pódense usar nun analizador estático (-fanalyzer) para detectar traballos incorrectos cos descritores de ficheiros.
  • Engadiuse un novo atributo "__attribute__((assume(EXPR)))", co cal pode dicirlle ao compilador que a expresión é verdadeira e que o compilador pode usar este feito sen avaliar a expresión.
  • Engadiuse a marca "-fstrict-flex-arrays=[nivel]" para seleccionar o comportamento ao procesar un elemento de matriz flexible en estruturas (Membros de matriz flexible, unha matriz de tamaño indefinido ao final da estrutura, por exemplo, "int b[] ").
  • Engadiuse a marca "-Wenum-int-mismatch" para emitir avisos se hai unha falta de coincidencia entre un tipo enumerado e un tipo enteiro.
  • O front-end de Fortran ten soporte total para a finalización.
  • Engadiuse soporte para funcións e tipos xenéricos (xenéricos) ao frontend para a linguaxe Go e garantiuse a compatibilidade con paquetes para a linguaxe Go 1.18.
  • O backend AArch64 admite CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) e Arm Neoverse V2 (neoverse -v2) . Engadiuse soporte para os argumentos "armv9.1-a", "armv9.2-a" e "armv9.3-a" á opción "-march=". Engadiuse compatibilidade para as extensións do procesador FEAT_LRCPC, FEAT_CSSC e FEAT_LSE2.
  • Engadiuse ao backend da arquitectura ARM soporte para CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) e Arm Cortex-M85 (cortex-m85).
  • Engadiuse ao backend x86 soporte para Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids e procesadores AMD Zen 4 (znver4). Implementáronse as extensións de arquitectura do conxunto de instrucións AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT e AMX-COMPLEX propostas nos procesadores Intel. Para C e C++ en sistemas con SSE2, ofrécese o tipo __bf16.
  • O backend de xeración de código para as GPU AMD Radeon (GCN) implementa a capacidade de usar aceleradores AMD Instinct MI200 para mellorar o rendemento de OpenMP/OpenACC. Vectorización mellorada mediante instrucións SIMD.
  • Capacidades de backend significativamente ampliadas para a plataforma LoongArch.
  • Engadido soporte para XuanTie C906 (thead-c906) da CPU T-Head no backend RISC-V. Soporte implementado para controladores de vectores definidos na especificación RISC-V Vector Extension Intrínseca 0.11. Engadido soporte para 30 extensións de especificación RISC-V.
  • Cando se xeran obxectos compartidos coa opción "-shared", o código de inicio xa non se engade despois de engadir un contorno de punto flotante se as optimizacións "-Ofast", "-ffast-math" ou "-funsafe-math-optimizations" están activadas .
  • O soporte para o formato de depuración DWARF está implementado en case todas as configuracións.
  • Engadida a opción "-gz=zstd" para comprimir a información de depuración mediante o algoritmo Zstandard. Eliminouse o soporte para o modo de compresión de información de depuración obsoleto "-gz=zlib-gnu".
  • Engadiuse o soporte inicial para OpenMP 5.2 (Open Multi-Processing) e continuou a implementación dos estándares OpenMP 5.0 e 5.1, definindo API e 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).
  • O soporte para o formato de almacenamento de información de depuración herdado "STABS" (activado polas opcións -gstabs e -gxcoff), creado na década de 1980 e usado no depurador dbx, foi descontinuado.
  • Soporte obsoleto para Solaris 11.3 (o código para admitir esta plataforma eliminarase nunha versión futura).

Fonte: opennet.ru

Engadir un comentario