Lançamento do conjunto de compiladores GCC 13

Após um ano de desenvolvimento, foi lançada a versão gratuita do compilador GCC 13.1, a primeira versão significativa na nova ramificação GCC 13.x. Sob o novo esquema de numeração de lançamento, a versão 13.0 foi usada durante o desenvolvimento e, pouco antes do lançamento do GCC 13.1, o ramo GCC 14.0 já foi bifurcado, a partir do qual o próximo lançamento significativo do GCC 14.1 será formado.

Grandes mudanças:

  • O GCC adotou um frontend para a construção de programas na linguagem de programação Modula-2. Ele suporta o código de construção que está em conformidade com os dialetos PIM2, PIM3 e PIM4, bem como o padrão ISO aceito para esse idioma.
  • Um frontend com a implementação do compilador de linguagem Rust preparado pelo projeto gccrs (GCC Rust) foi adicionado à árvore fonte do GCC. Na exibição atual, o forntend é marcado como experimental e desativado por padrão. Uma vez que o front-end esteja pronto (esperado para o próximo lançamento), o kit de ferramentas GCC padrão pode ser usado para compilar programas Rust sem a necessidade de instalar o compilador rustc construído usando desenvolvimentos LLVM.
  • Link-in-Step Optimization (LTO) adiciona suporte para um servidor de trabalho (jobserver) mantido pelo projeto GNU make para otimizar a execução paralela de construção em vários threads. No GCC, o jobserver é usado para paralelizar o trabalho durante a otimização LTO no contexto de todo o programa (WPA, Whole-program Analysis). Pipes nomeados (--jobserver-style=fifo) são usados ​​por padrão para interagir com o jobserver.
  • O analisador estático (-fanalyzer) oferece 20 novas verificações de diagnóstico, incluindo "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer-infinite -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • A capacidade de gerar diagnósticos no formato SARIF com base em JSON foi implementada. O novo formato pode ser usado para obter resultados de análises estáticas (GCC -fanalyzer), bem como para obter informações sobre avisos e erros. A ativação é feita com a opção "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", onde as opções com "json" resultam na saída em uma variante específica do GCC do formato JSON .
  • Implementadas algumas funcionalidades definidas no padrão C23 C, como a constante nullptr para definição de ponteiros nulos, facilitando o uso de listas com número variável de argumentos (variadic), estendendo as capacidades de enums, o atributo noreturn, permitindo o uso de constexpr e auto ao definir objetos, o typeof e typeof_unqual, novas palavras-chave alignas, alignof, bool, false, static_assert, thread_local e true, permitem parênteses vazios na inicialização.
  • Implementado alguns recursos definidos no padrão C++23, como a capacidade de colocar marcas no final de expressões compostas, compatibilidade com o tipo char8_t, a diretiva de pré-processador #warning, delimitada por (\u{}, \o{} , \x{}) e sequências de escape nomeadas ('\N{LETRA MAIÚSCULA A}'), operador estático(), operador estático[], operador de igualdade dentro de expressões, exceção de algumas restrições no uso de constexpr, suporte para UTF-8 em textos de origem.
  • Suporte experimental aprimorado para padrões C++20 e C++23 em libstdc++, como adicionar suporte a arquivo de cabeçalho e std::format, recursos estendidos de arquivo de cabeçalho , tipos adicionais de ponto flutuante adicionados, arquivos de cabeçalho implementados E .
  • Adicionados novos atributos de função para documentar que um descritor de arquivo é passado em uma variável inteira: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" e "__attribute__((fd_arg_write(N) )) ". Os atributos especificados podem ser usados ​​em um analisador estático (-fanalyzer) para detectar trabalho incorreto com descritores de arquivo.
  • Um novo atributo "__attribute__((assume(EXPR)))" foi adicionado, com o qual você pode dizer ao compilador que a expressão é verdadeira e o compilador pode usar esse fato sem avaliar a expressão.
  • Adicionado sinalizador "-fstrict-flex-arrays=[level]" para selecionar o comportamento ao processar um elemento de array flexível em estruturas (Flexible Array Members, um array de tamanho indefinido no final da estrutura, por exemplo, "int b[] ").
  • Adicionado sinalizador "-Wenum-int-mismatch" para emitir avisos se houver uma incompatibilidade entre um tipo enumerado e um tipo inteiro.
  • O front-end Fortran tem suporte total para finalização.
  • O suporte para funções e tipos genéricos (genéricos) foi adicionado ao frontend para a linguagem Go e a compatibilidade com pacotes para a linguagem Go 1.18 foi garantida.
  • O back-end AArch64 suporta CPU Ampere-1A (ampere1a), Arm Cortex-A715 (córtex-a715), Arm Cortex-X1C (córtex-x1c), Arm Cortex-X3 (córtex-x3) e Arm Neoverse V2 (neoverse -v2) . O suporte para os argumentos "armv9.1-a", "armv9.2-a" e "armv9.3-a" foi adicionado à opção "-march=". Adicionado suporte para extensões de processador FEAT_LRCPC, FEAT_CSSC e FEAT_LSE2.
  • O suporte para CPUs STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) e Arm Cortex-M85 (cortex-m85) foi adicionado ao back-end da arquitetura ARM.
  • O suporte para os processadores Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids e AMD Zen 86 (znver4) foi adicionado ao back-end x4. As extensões de arquitetura do conjunto de instruções AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT e AMX-COMPLEX propostas nos processadores Intel foram implementadas. Para C e C++ em sistemas com SSE2, o tipo __bf16 é fornecido.
  • O back-end de geração de código para GPUs AMD Radeon (GCN) implementa a capacidade de usar os aceleradores AMD Instinct MI200 para melhorar o desempenho do OpenMP/OpenACC. Vetorização aprimorada usando instruções SIMD.
  • Os recursos de back-end para a plataforma LoongArch foram significativamente expandidos.
  • Adicionado suporte para CPU T-Head's XuanTie C906 (thead-c906) no back-end RISC-V. Suporte implementado para manipuladores de vetores definidos na especificação RISC-V Vector Extension Intrinsic 0.11. Adicionado suporte para 30 extensões de especificação RISC-V.
  • Ao gerar objetos compartilhados com a opção "-shared", o código de inicialização não é mais adicionado após adicionar um ambiente de ponto flutuante se as otimizações "-Ofast", "-ffast-math" ou "-funsafe-math-optimizations" estiverem habilitadas .
  • O suporte para o formato de depuração DWARF é implementado em quase todas as configurações.
  • Adicionada a opção "-gz=zstd" para compactar informações de depuração usando o algoritmo Zstandard. Suporte removido para o modo obsoleto de compactação de informações de depuração "-gz=zlib-gnu".
  • O suporte inicial para OpenMP 5.2 (Open Multi-Processing) foi adicionado e a implementação dos padrões OpenMP 5.0 e 5.1 continuou, definindo APIs e métodos para aplicar métodos de programação paralela em sistemas multi-core e híbridos (CPU + GPU / DSP) com unidades de memória compartilhada e vetorização (SIMD).
  • O suporte para o formato legado de armazenamento de informações de depuração "STABS" (ativado pelas opções -gstabs e -gxcoff), criado na década de 1980 e usado no depurador dbx, foi descontinuado.
  • Suporte obsoleto para Solaris 11.3 (o código para suportar esta plataforma será removido em uma versão futura).

Fonte: opennet.ru

Adicionar um comentário