E foi lançado o LLVM 17 com diversas melhorias, alterações e correções. Confira todas as novidades dessa importante atualização.
LLVM é um compilador compatível com GCC (Compiladores, Otimizadores e Geradores de Código) que compila programas em um bitcode intermediário de instrução virtual do tipo RISC (uma máquina virtual de baixo nível com otimização multinível).
O pseudocódigo gerado pode ser convertido pelo compilador JIT em instruções de máquina no momento da execução do programa.
Agora, após pouco mais de seis meses de desenvolvimento, foi anunciado o lançamento da nova versão do projeto LLVM 16.0, versão na qual estão implementadas um grande número de alterações e melhorias.
Novidades do LLVM 17
Nesta nova versão do LLVM 17.0 que se apresenta, existem vários aspectos relevantes a ter em conta, entre eles, por exemplo, as melhorias no backend X86, uma vez que adicionou suporte para ISA SHA512, ISA SM3, arquitetura de conjunto de instruções extensões ISA SM4 e ISA AVX-VNNI-INT16.
Além disso, também destaca as melhorias nos recursos de backend da arquitetura RISC-V que foram significativamente expandidas, à medida que adicionou suporte para o processador sifive-x280.
Outra mudança que podemos encontrar é o suporte implementado para extensões de processador XTH*, bem como compatibilidade com as extensões LSX, LASX, LVZ e LBT ISA para o backend da arquitetura LoongArch.
Back-ends aprimorados para arquiteturas AArch64, ARM, WebAssembly, MIPS, PowerPC, AMDGPU, recursos expandidos do vinculador LLD e adicionado um novo comando “register info” ao depurador LLDB para exibir todas as informações conhecidas sobre um registro.
Em relação às melhorias no Clang 17.0, destaca-se que foram implementadas as funcionalidades definidas no futuro padrão C C2x como as palavras-chave bool, static_assert, aligns, alignof e thread_local, bem como a capacidade de especificar colchetes vazios “{ }” para inicialização com valores zero.
O código C fornece a capacidade de encaminhar a expressão “goto” dentro de blocos “asm” usando tags selecionadas indiretamente, adicionou suporte para uma extensão C que permite que um tipo seja usado em vez de uma expressão como o primeiro operando em “_Generic”, além , expressões constantes em linguagem C permitem o uso de estruturas, uniões e arrays declarados com o atributo “const”.
Em relação às melhorias relacionadas ao padrão C++20, é mencionado que agora em todas as plataformas, exceto Windows, há suporte completo para Corrotinas, além de terem sido implementados os requisitos adicionais para operações de comparação de expressões constantes.
Também digno de nota é que os modelos lambda especificados imediatamente após os parâmetros do modelo e contendo uma variável com um tipo dependente no bloco agora têm garantia de serem analisados corretamente.
Reservou o uso de sublinhados duplos em literais de usuário e desencorajou o uso da palavra-chave “operador” em definições de funções com identificadores reservados no nome
Quanto às melhorias a serem feitas relacionadas ao padrão C++23, menciona-se que o mesmo está em fase final de aprovação pela ISO, uma vez que o escopo do tipo de retorno final nas funções lambda foi alterado para observar primeiro os ganchos e então o texto ao redor.
Das outras mudanças que se destacam:
- Adicionada a capacidade de definir matrizes multidimensionais usando
- Ao compilar aplicativos C++ usando o modo de otimização “-O0”, a geração de código para chamadas foi aprimorada.
- Adicionado suporte para a variável de ambiente NO_COLOR para desabilitar a cor de saída.
- As ferramentas de análise estática e diagnóstico foram significativamente expandidas, por exemplo, novas verificações de overflow de inteiros assinados, correção de modelo lambda, expressões constexpr, comparações de ponteiro nulo, uso de estruturas não inicializadas, etc.
- A biblioteca Libc++ continua a implementar suporte para os recursos dos padrões C++20 e C++23, e o trabalho também começou para fornecer suporte para a especificação C++26.
- Adicionado suporte para a expressão “requires cplusplus23” nas descrições de conexões entre arquivos de cabeçalho e módulos.
Para saber mais sobre essa versão do LLVM, acesse a nota de lançamento.
Como instalar ou atualizar o LLVM
Para instalar a versão mais recente do LLVM nas principais distribuições Linux, basta procurá-lo no gerenciador de pacotes de sua distribuição.