E foi lançado o GCC 12.1 com novas funcionalidades, melhorias, e correções. Confira as novidades e veja como instalar no Linux.
O GCC, ou GNU Compiler Collection, é um conjunto de compiladores de linguagens de programação produzido pelo projecto GNU para construir um sistema operacional semelhante ao Unix.
GNU Compiler Collection inclui front-ends para C, C++ , Objective-C, Fortran, Ada, Go e D, bem como bibliotecas para essas linguagens (libstdc++,…). O GCC foi originalmente escrito como o compilador para o sistema operacional GNU.
O GCC 12 já é o compilador do sistema para o Fedora 36, e o GCC 12 também estará disponível no Red Hat Enterprise Linux no Red Hat Developer Toolset (versão 7) ou Red Hat GCC Toolset (versões 8 e 9).
E, agora, o lançamento da nova versão do compilador GCC (GNU Compiler Collection) 12.1 já foi anunciado e como em todas as principais versões do GCC, esta versão trará muitas adições, melhorias, correções de bugs e novas funcionalidades, além disso neste mês (23 de maio), o projeto completará 35 anos desde a formação do primeiro lançamento.
“Os desenvolvedores do GCC têm o orgulho de anunciar outro grande lançamento do GCC, 12.1.”
“Este ano comemoramos o 35º aniversário da primeira versão beta do GCC, e este mês comemoraremos 35 anos desde o lançamento do GCC 1.0!”
“Esta versão descarta o suporte para o formato de depuração STABS e introduz o suporte para o formato de depuração CTF [1]. As interfaces C e C++ continuam avançando com suporte expandido para funções nos próximos padrões C2X e C++23, e a C++ Standard Library melhora o suporte para partes experimentais de C++20 e C++23. A interface Fortran agora é totalmente compatível com TS 29113 para interoperabilidade com C.”
Novidades do GCC 12.1
Várias propostas foram implementadas nesta nova versão, por exemplo para as linguagens C e C++, uma função interna __builtin_dynamic_object_size foi adicionada para determinar o tamanho de um objeto, compatível com uma função Clang similar.
Adicionado suporte para o atributo “indisponível” para as linguagens C e C++ (por exemplo, você pode marcar funções que resultarão em erro quando usadas), bem como adicionado suporte para o “#elifdef” e “#elifdef” diretivas de pré-processamento. #elifndef» para as linguagens C e C++.
Observe também que o sinalizador “-Wbidi-chars” foi adicionado para avisar se caracteres UTF-8 são usados incorretamente, alterando a ordem de exibição do texto bidirecional, bem como o sinalizador “-Warray-compare” para emitir um aviso. para comparar dois operandos que se referem a arrays.
Além disso, destaca-se a implementação dos padrões OpenMP 5.0 e 5.1 (Open Multi-Processing), que definem APIs e métodos para aplicar métodos de programação paralela em sistemas multicore e híbridos (CPU + GPU/DSP) com memória compartilhada e unidades de vetorização (SIMD), foi continuado.
Implementação também aprimorada da especificação de programação paralela OpenACC 2.6, que define os meios para descarregar operações em GPUs e processadores especializados como NVIDIA PTX e suporte adicional para instruções estendidas Intel AVX512-FP16 e o tipo _Float16 para o back-end de compilação do código x86.
O front-end Fortran fornece suporte completo para a especificação TS 29113, que descreve as possibilidades de garantir a portabilidade entre o código Fortran e C.
Suporte obsoleto para o formato de armazenamento de informações de depuração “STABS” criado na década de 1980.
Adicionado suporte para a extensão __builtin_shufflevector(vec1, vec2, index1, index2, …) adicionada anteriormente ao Clang, que fornece uma única chamada para realizar operações comuns de embaralhamento e embaralhamento de vetores.
Ao usar o nível de otimização “-O2”, a vetorização é habilitada por padrão (os modos -ftree-vectorize e -fvect-cost-model=very-cheap estão habilitados).
O modelo “muito barato” permite a vetorização apenas se o código vetorial puder substituir completamente o código escalar vetorizável.
Adicionado o modo “-ftrivial-auto-var-init” para permitir a inicialização de variável explícita na pilha para rastrear problemas e bloquear vulnerabilidades associadas ao uso de variáveis não inicializadas.
Adicionada implementação de funções C integradas ao compilador (Intrinsics) para carregamento atômico e armazenamento de dados na memória, com base no uso de instruções ARM estendidas (ls64).
Adicionado suporte para acelerar as funções memcpy, memmove e memset usando a extensão ARM mopoption.
Adicionado um novo modo de verificação “-fsanitize=shadow-call-stack” ( ShadowCallStack ), que atualmente está disponível apenas para a arquitetura AArch64 e funciona ao compilar código com a opção “-ffixed-r18”.
O modo fornece proteção contra reescrever o endereço de retorno da função no caso de estouro de buffer de pilha.
A essência da proteção é salvar o endereço de retorno em uma pilha “sombra” separada após a transferência do controle para a função e recuperar esse endereço antes de sair da função.
Para saber mais sobre essa versão do GCC, acesse a nota de lançamento.
Como instalar ou atualizar o GCC
O GCC faz parte do padrão da maioria das distribuições Linux, e em algumas, já vem instalado. Portanto, para receber a versão mais recente desse software, basta apenas manter seu sistema atualizado ou usar a central de programas dele.