2011-04-18 9 views
113

Tengo una pregunta relativa a llvm, sonido metálico, y gcc en OS X.LLVM vs ruido metálico en OS X

¿Cuál es la diferencia entre el llvm gcc-4.2, 2.0 y llvm sonido metálico? Sé que todos se basan en llvm, pero ¿cómo son diferentes?

Además de una compilación más rápida, ¿cuál es la ventaja de llvm sobre gcc?

+8

llvm es solo un backend, no puede haber un compilador llvm independiente ... solo hay diferentes interfaces para ello, como gcc y clang. – smerlin

+3

@smerlin: "compilador de llvm" es el nombre comercial de Apple para clang + llvm: http://developer.apple.com/technologies/tools/whats-new.html#llvm-compiler –

+0

Otros detalles aquí: http: // stackoverflow .com/a/26724886/1938163 –

Respuesta

168

LLVM originalmente significaba "máquina virtual de bajo nivel", a pesar de que ahora sólo representa a sí mismo, ya que se ha convertido en algo más que una máquina virtual tradicional. Es un conjunto de bibliotecas y herramientas, así como una representación intermedia estandarizada, que se puede utilizar para ayudar a compilar compiladores y compiladores just-in-time. No puede compilar nada más que su propia representación intermedia por sí mismo; necesita un frontend específico del idioma para poder hacerlo. Si las personas simplemente se refieren a LLVM, probablemente solo se refieran a la biblioteca y las herramientas de bajo nivel. Algunas personas pueden referirse a Clang o llvm-gcc incorrectamente como "LLVM", lo que puede causar cierta confusión.

llvm-gcc es una versión modificada del CCG, que utiliza LLVM como motor en lugar de la propia GCC. Ahora está en desuso, a favor de DragonEgg, que usa el nuevo sistema de complementos de GCC para hacer lo mismo sin bifurcar GCC.

Clang es un nuevo compilador de C/C++/Objective-C, que utiliza su propio frontend y LLVM como el servidor. Las ventajas que proporciona son mejores mensajes de error, tiempo de compilación más rápido y una forma más fácil para que otras herramientas se conecten al proceso de compilación (como LLDB debugger y Clang static analyzer). También es razonablemente modular, por lo que puede usarse como una biblioteca para otro software que necesite analizar el código C, C++ o Objective-C.

Cada uno de estos enfoques (GCC simple, GCC + LLVM y Clang) tienen sus ventajas y desventajas. Los últimos conjuntos de puntos de referencia que he visto mostraron a GCC producir código ligeramente más rápido en la mayoría de los casos de prueba (aunque LLVM tuvo una ligera ventaja en unos pocos), mientras que LLVM y Clang dieron tiempos de compilación significativamente mejores.Los combos GCC y GCC/LLVM tienen la ventaja de que se ha probado mucho más código y funciona en el sabor GCC de C; hay algunas extensiones específicas del compilador que solo GCC tiene, y algunos lugares donde el estándar permite que la implementación varíe, pero el código depende de una implementación en particular. Es mucho más probable si obtienes una gran cantidad de código C heredado que funcionará en GCC que lo que funcionará en Clang, aunque esto está mejorando con el tiempo.

+4

Gracias por esta explicación :) – flumpb

+8

Para agregar a esta maravillosa respuesta: clang es también un conjunto de bibliotecas (llamadas libclang) que puedes usar para cosas como el análisis de código, autocompletado, resaltado de sintaxis, etc. Esto es muy útil para IDEs. –

+3

Al compilar para MacOS X o iOS, considere que Clang es el software que Apple usa para construir todos sus MacOS X e iOS, incluido el sistema operativo, y que Clang es lo que obtiene automáticamente, sin esfuerzo, y lo que todos alguna vez pida ayuda está usando. Apple nunca ha soportado gcc pasado gcc 4.2, y ya no envía ninguna versión de gcc. – gnasher729

5

llvm-gcc-4.2 utiliza el front-end GCC para analizar el código, a continuación, genera la salida compilado usando LLVM.

El "llvm compilador 2.0" utiliza el front-end sonido metálico para analizar su código, y genera la salida compilado usando LLVM. "clang" es en realidad el nombre de este front-end, pero a menudo se utiliza casualmente como un nombre para el compilador como un todo.

43

Hay 2 cosas diferentes aquí.

LLVM es un compilador de back-end destinado a compilar compiladores encima. Se trata de optimizaciones y producción de código adaptado a la arquitectura de destino.

sonido metálico es un extremo delantero que analiza C, C++ y el código C Objetivo y la traduce en una representación adecuada para LLVM.

llvm gcc era una versión inicial de un compilador C++ basado en llvm basado en gcc 4.2, que ahora está en desuso, ya que CLang puede analizar todo lo que pudo analizar, y más.

Finalmente, la principal diferencia entre CLang y gcc no radica en el código producido sino en el enfoque. Mientras que gcc es monolítico, CLang se ha creado como un conjunto de bibliotecas. Este diseño modular permite grandes oportunidades de reutilización para IDE o herramientas de finalización, por ejemplo.

Por el momento, el código producido por gcc 4.6 es generalmente un poco más rápido, pero CLANG está cerrando la brecha.