Eu tenho uma pergunta sobre llvm, clang e gcc no OS X.
Qual é a diferença entre o llvm-gcc 4.2, llvm 2.0 e clang? Eu sei que todos eles constroem no llvm, mas como eles são diferentes?
Além da compilação mais rápida, qual é a vantagem do llvm sobre o gcc?
Respostas:
O LLVM originalmente significava "máquina virtual de baixo nível", apesar de agora apenas representar a si mesmo, pois cresceu para ser algo diferente de uma máquina virtual tradicional. É um conjunto de bibliotecas e ferramentas, bem como uma representação intermediária padronizada, que pode ser usada para ajudar a construir compiladores e compiladores just-in-time. Ele não pode compilar nada além de sua própria representação intermediária; ele precisa de um front-end específico do idioma para fazer isso. Se as pessoas se referem ao LLVM, provavelmente significam apenas a biblioteca e as ferramentas de baixo nível. Algumas pessoas podem se referir a Clang ou llvm-gcc incorretamente como "LLVM", o que pode causar alguma confusão.
O llvm-gcc é uma versão modificada do GCC, que usa o LLVM como back-end em vez do próprio GCC. Agora está obsoleto, em favor do DragonEgg, que usa o novo sistema de plug-ins do GCC para fazer a mesma coisa sem usar o GCC.
Clang é um compilador C / C ++ / Objective-C totalmente novo, que usa seu próprio front-end e LLVM como back-end. As vantagens que ele oferece são melhores mensagens de erro, tempo de compilação mais rápido e uma maneira mais fácil de outras ferramentas se conectarem ao processo de compilação (como o depurador LLDB e o analisador estático Clang ). Também é razoavelmente modular e, portanto, pode ser usado como uma biblioteca para outro software que precisa analisar o código C, C ++ ou Objective-C.
Cada uma dessas abordagens (GCC simples, GCC + LLVM e Clang) tem suas vantagens e desvantagens. Os últimos conjuntos de benchmarks que eu vi mostraram que o GCC produzia código um pouco mais rápido na maioria dos casos de teste (embora o LLVM tivesse uma leve vantagem em alguns), enquanto o LLVM e o Clang proporcionaram tempos de compilação significativamente melhores. O GCC e os combos GCC / LLVM têm a vantagem de muito mais código ter sido testado e funcionar com o sabor C do GCC; existem algumas extensões específicas do compilador que apenas o GCC possui e alguns locais em que o padrão permite que a implementação varie, mas o código depende de uma implementação específica. É muito mais provável que, se você obtiver uma grande quantidade de código C legado, ele funcione no GCC do que em Clang, embora isso melhore ao longo do tempo.
fonte
Existem 2 coisas diferentes aqui.
O LLVM é um compilador de back-end destinado a criar compiladores sobre ele. Ele lida com otimizações e produção de código adaptado à arquitetura de destino.
O CLang é um front end que analisa os códigos C, C ++ e Objective C e o converte em uma representação adequada para LLVM.
O llvm gcc era uma versão inicial de um compilador C ++ baseado no llvm baseado no gcc 4.2, que agora está obsoleto, pois o CLang pode analisar tudo o que poderia analisar e muito mais.
Finalmente, a principal diferença entre CLang e gcc não está no código produzido, mas na abordagem. Enquanto o gcc é monolítico, o CLang foi construído como um conjunto de bibliotecas. Esse design modular permite grandes oportunidades de reutilização para IDE ou ferramentas de conclusão, por exemplo.
No momento, o código produzido pelo gcc 4.6 é geralmente um pouco mais rápido, mas o CLang está diminuindo a diferença.
fonte
O llvm-gcc-4.2 usa o front-end do GCC para analisar seu código e, em seguida, gera a saída compilada usando o LLVM.
O "llvm compiler 2.0" usa o front-end clang para analisar seu código e gera a saída compilada usando LLVM. "clang" é na verdade apenas o nome desse front-end, mas geralmente é usado casualmente como um nome para o compilador como um todo.
fonte