O GCC 15.1 chega ao C23 e adiciona melhorias, otimizações e muito mais ao C++.

gcc

Após um ano de intenso desenvolvimento, foi anunciado o lançamento da nova versão do «GCC 15.1», que está posicionada como a primeira versão estável dentro do novo ramo 15.x deste popular conjunto de compiladores de código aberto.

Este lançamento não apenas lança oficialmente a nova série GCC 15, mas também marca o início dos preparativos para o desenvolvimento do GCC 16, já que a ramificação 16.0 foi bifurcada em paralelo e estabelecerá as bases para o próximo lançamento principal, o GCC 16.1.

Novos recursos principais do GCC 15.1

Uma das mudanças mais notáveis ​​nesta nova versão é que o GCC 15.1 adota o padrão C23 como padrão para compilar código C, usando a opção -std=gnu23. Esta atualização substitui o padrão anterior usado por padrão, C17 (-std=gnu17), e introduz uma série de novos recursos do novo padrão. Entre eles está o constante nullptr, o tipo _BitInt(n) e as palavras-chave bool, true e false, o que pode causar conflitos com identificadores existentes no código legado.

Outro novo recurso que o GCC 15.1 incorpora é o Diretiva #embed para incorporar dados binários, e atributos como não sequenciado e reproduzível, que fornecem maior controle sobre a ordem de execução e a determinação de resultados consistentes. Além disso, elementos do futuro padrão C2Y foram implementados, como variáveis ​​declaradas dentro de condições if, intervalos de valores em instruções case, sufixos imaginários i e j e suporte para operadores ++ e — aplicados a números complexos.

Melhorias em C++ e o futuro C++26

No caso da linguagem C++, a nova versão do O GCC 15.1 implementa recursos que estão sendo discutidos para o padrão C++26, à medida que novos recursos são introduzidos, como o operador "friend", o uso de constexpr com variantes do novo operador e melhorias na sintaxe para links estruturados e atributos como musttail para recursão de cauda garantida.

O suporte ao C++23 também foi expandido com novas regras para uso de exportação, melhorias no tratamento de objetos temporários e uma implementação experimental dos módulos std e std.compat em libstdc++. Além disso, a segurança é reforçada para inicialização de união e a compilação de código é melhorada graças a um sistema de hash de modelo mais eficiente.

Novos avisos e melhorias na análise estática

O sistema A análise estática recebeu um redesenho visual que destaca problemas por meio de símbolos, Dicas para migrar para o C23 e uma nova biblioteca libgdiagnostics que permite a reutilização da lógica de diagnóstico em outros projetos. O suporte para geração de relatórios no formato SARIF também foi introduzido, facilitando a integração com ferramentas modernas de análise de código.

Em Os avisos existentes são adicionados aos novos, como -Wanalyzer-comportamento-indefinido-ptrdiff para detectar subtrações entre ponteiros não relacionados, –Espaço em branco à direita e espaço em branco à esquerda para indicar espaços em branco desnecessários e –Guarda-cabeça-de-cavalo para detectar erros em proteções de inclusão de cabeçalho.

Otimizações e suporte

Entre as otimizações notáveis, Um modo de compilação incremental para LTO está incluído (Link-Time Optimization), projetado para acelerar recompilações quando as alterações são mínimas. Também a vetorização do loop é melhorada, mesmo em casos onde o tamanho dos arrays não é conhecido em tempo de compilação, e aumenta a velocidade de compilação de arquivos muito grandes.

No lado do suporte, extensões ARMv64 foram adicionadas ao AArch8, suporte para novas CPUs como Apple M3, Cortex-X925 e NVIDIA Grace, e estende a plataforma MinGW. A geração de código para GPUs AMD Radeon é fortalecida com Suporte experimental para as novas séries GFX9, GFX10.3 e GFX11. Para a arquitetura x86, o suporte para AVX10.2 e novas instruções AMX está habilitado, e o suporte para Xeon Phi Knights foi descontinuado.

Além disso, O GCC 15.1 apresenta um compilador para COBOL (gcobol), com suporte para arquiteturas x86-64 e AArch64, e uma implementação atualizada da linguagem D (versão 2.111.0). Foi adicionado suporte para inteiros sem sinal em Fortran, e a adoção do OpenMP 5.0 para 6.0 foi avançada, incluindo melhorias de interoperabilidade e uso unificado de memória em GPUs.