Contents

Um “C++ seguro” sendo explorado usando o novo ClangIR

Contents

/images/a-safe-c-being-explored-using-the-new-clangir.webp

Um “pedido” instigante para comentários” que pretendo discutir desde o mês passado envolve a criação do “Safe C++”, que está sendo desenvolvido como uma extensão do compilador LLVM Clang. Este projeto aproveita o recentemente emergente Clang Intermediate Representation (ClangIR).

Esta não é a proposta inaugural para uma variante “segura” de C++, pois no final de novembro, Chuanqi Xu apresentou uma iniciativa para desenvolver um “Safe C++” baseado na representação intermediária ClangIR. Esta nova versão seria essencialmente um subconjunto reduzido do ISO C++, incorporando apenas alguns pragmas e atributos opcionais que poderiam ser desconsiderados. A abordagem simplificada visa facilitar a compilação por outros compiladores C++, mesmo aqueles que não suportam este dialeto “seguro” específico.

ClangIR é a nova representação intermediária (IR) que vem se formando como um dialeto MLIR para Linguagens C?C\+\+ descritas na documentação como estando entre AST e LLVM IR do Clang. O ClangIR pode lidar com semntica de nível superior C/C\+\+ para melhores diagnósticos e otimizações de desempenho que são mais difíceis de alcançar em Clang AST ou LLVM IR puro. Aqueles que desejam saber mais sobre o ClangIR em desenvolvimento podem fazê-lo por meio da documentação desse projeto em andamento. esforço.

Chuanqi Xu pretende utilizar o ClangIR para aumentar a segurança do C++. Uma implementação de demonstração já foi desenvolvida. A proposta inclui a introdução de um pragma, #pragma clang SafeCXX, que permitiria que certas construções C++ fossem reconhecidas e aplicadas por compiladores compatíveis, enquanto seriam ignoradas com segurança por aqueles que não as suportam. Além disso, há uma sugestão para um pragma complementar, #pragma clang UnsafeCXX, para delinear seções de código que empregam práticas C++ menos seguras.

A abordagem envolve a utilização de Safe C++ baseado em ClangIR para implementar verificação de empréstimo, gerenciamento para chamadas de função obsoletas, eliminação progressiva do uso de ponteiros, obtenção de endereços, desreferenciação e referências em funções assíncronas. Além disso, várias outras modificações serão feitas para aumentar a segurança do código C++, aproveitando de forma mais eficaz as tecnologias contemporneas de compilador disponíveis no LLVM/Clang.

A proposta é um pouco prematura, já que o próprio ClangIR ainda não está estabilizado, mas aqueles interessados ​​podem ver a proposta RFC em Discurso LLVM . Alguns dos primeiros códigos prototipados podem ser encontrados neste repositório GitHub . Será interessante ver o que resultará desse esforço seguro de C\+\+ e, mais amplamente, do desenvolvimento do ClangIR em 2025.