Desenvolvido por | Apple , Microsoft , Google , ARM , Sony , Intel e Advanced Micro Devices |
---|---|
Última versão | 12.0.0 (14 de abril de 2021) |
Depósito | github.com/llvm/llvm-project |
Escrito em | C ++ e C |
Sistema operacional | Tipo Unix |
Meio Ambiente | Multi plataforma |
Modelo | Compilador |
Licença | NCSA / Universidade de Illinois Licença de código aberto e licença Apache |
Local na rede Internet | clang.llvm.org |
Clang é um compilador para a C , C ++, e Objective-C linguagens de programação . Sua interface de baixo nível usa bibliotecas LLVM para compilação.
É um software livre resultante de um projeto de pesquisa universitário e distribuído sob os termos da NCSA / University of Illinois Open Source License .
O Clang agora é mantido por uma grande comunidade, incluindo muitos funcionários da Apple, Google, ARM ou Mozilla, como parte do projeto LLVM .
Seu objetivo é oferecer uma alternativa ao GCC .
Em 2005, a Apple usou o LLVM em muitos projetos comerciais, incluindo iOS SDK e Xcode 3.1.
Um desses usos foi um compilador de código OpenGL para Mac OS X que converte chamadas para funções OpenGL em instruções de GPU para processadores gráficos que não tinham todas as funcionalidades necessárias. Isso permitiu que a Apple suportasse a API OpenGL completa em computadores que usam GPUs Intel GMA , melhorando o desempenho dessas máquinas.
O LLVM foi originalmente planejado para ser a base para uma nova versão do GCC, já que o GCC causou problemas para os desenvolvedores do LLVM e para a Apple. O GCC é um grande projeto e seu desenvolvimento é complexo: como disse um ex-desenvolvedor do GCC "Tentar fazer o hipopótamo dançar não é realmente muito agradável" e um dos participantes do Google Summer of Code comentou que “Lendo o código do GCC foi um exercício muito difícil para mim. Na verdade, é o único projeto em que sei que fica cada vez mais difícil com o tempo ” .
A Apple usa muito Objective-C , mas o front-end GCC desta linguagem tem baixa prioridade para desenvolvedores . Além disso, o GCC não se integra bem com o IDE da Apple. Finalmente, o GCC é distribuído sob a licença GPL versão 3, que requer que os desenvolvedores que distribuem extensões para o GCC ou versões modificadas dele publiquem seu código-fonte, enquanto o LLVM usa uma licença do tipo BSD que permite o uso de seu código em um programa proprietário .
A Apple optou por desenvolver um novo compilador que suporta apenas C99 , Objective C e C ++. O projeto Clang tornou-se open-source em julho de 2007.
O Clang foi projetado para funcionar com LLVM. Juntos, esses dois fornecem uma cadeia de compilação para substituir totalmente o GCC. Por ter sido projetado como uma biblioteca, assim como o resto do LLVM, o Clang é facilmente utilizável em outros aplicativos como o Vim .
Um dos principais objetivos do Clang é seu melhor suporte à compilação incremental , a fim de permitir um melhor uso do compilador por meio de um IDE . O GCC foi projetado para usar um esquema clássico de build-link-edit-debug e, embora forneça ferramentas de compilação incrementais e dinâmicas, integrá-las a outras ferramentas nem sempre é fácil. Por exemplo, o GCC tem uma etapa chamada "dobrar" que é a chave para o processo de construção, mas tem o efeito de transformar a árvore de construção de uma forma que não a faz mais parecer com o código original. Se um erro for encontrado durante ou após essa etapa, pode ser difícil encontrar o local no código de onde ele veio. Além disso, IDEs usando GCC como uma cadeia de construção usam outras ferramentas para fornecer destaque de sintaxe ou preenchimento automático .
O Clang foi projetado para reter mais informações durante o processo de construção do que o GCC e preservar a forma geral do código original. O objetivo é rastrear mais facilmente a origem do problema. Os relatórios de erros do Clang também são projetados para serem mais detalhados e específicos e para serem mais fáceis de usar em um IDE. Seu design modular permite que o código-fonte seja indexado, verificação de sintaxe e outros recursos associados ao desenvolvimento rápido de aplicativos . A árvore de sintaxe também é mais adequada para refatoração automática, pois permanece na forma de texto analisável.
O Clang é modular, baseado inteiramente em bibliotecas substituíveis na vinculação (em oposição aos módulos que podem ser combinados em tempo de compilação) e bem documentado. Em alguns casos, as bibliotecas vêm em várias versões que podem ser trocadas no tempo de execução; por exemplo, o analisador tem uma versão que oferece métricas de desempenho para o processo de compilação.
Clang, como o nome sugere, é um compilador que suporta apenas linguagens baseadas em C. Ele não oferece suporte para linguagens diferentes de C, C ++, Objective-C e Objective-C ++. Em muitos casos, o Clang pode substituir o GCC, sem impacto nas cadeias de construção de software. Na verdade, o clang oferece suporte à maioria das opções do GCC.
Os desenvolvedores do Clang afirmam que ele usa menos memória e é mais rápido do que os compiladores concorrentes, incluindo o GCC. Como prova disso, eles relatam que em outubro de 2007, Clang compilou a biblioteca Carbon pelo menos duas vezes mais rápido que o GCC, usando cerca de 6 vezes menos memória e espaço em disco.
A compatibilidade do Clang com o GCC é muito boa e a compilação geralmente mais rápida. O desempenho dos programas compilados com LLVM / Clang já foi pior do que o do GCC, mas em meados de 2012, o GCC venceu em alguns benchmarks e o Clang em outros.
Clang (e LLVM ) estão sob uma licença não copyleft gratuita , o que significa que podem ser modificados com código proprietário licenciado .
Portanto, a Microsoft usa o Clang como base de seu compilador para DirectX : HLSL . Não era gratuito, pelo menos até ser lançado sob uma licença gratuita no início de 2017.
(en) Site oficial