2009-10-11 13 views
38

El readme incluido con el nuevo Xcode 3.2.1 esta semana dice lo siguiente:Xcode 3.2.1 GCC CLANG y LLVM desmitificación

  • análisis de código estático está totalmente integrado en el IDE de Xcode a través de la construcción y la opción Analizar bajo el menú Generar o por medio de generación personalizada configuración
  • GCC 4.2 es el compilador del sistema por defecto para el 10,6 SDK
  • el compilador LLVM opcional se incluye el uso de dos frentes diferentes termina - el compilador Clang es un programa de análisis de última generación que ofrece de forma espectacular Tiempos de compilación mejorados. Para una compatibilidad máxima, el compilador LLVM GCC utiliza el programa de fondo LLVM con el analizador GCC 4.2.
  • El nuevo compilador opcional Clang-LLVM 1.0 usa el analizador de inicio Clang mucho más rápido junto con el compilador de fondo LLVM para compilaciones rápidas y código ejecutable rápido. Muchos proyectos se beneficiarán de esta combinación de compiladores, aunque GCC 4.2 sigue siendo el sistema predeterminado. El compilador Clang-LLVM 1.0 recurrirá a LLVM-GCC 4.2 cuando encuentre el código C++.

Nuestra empresa tiene proyectos existentes que son pura C, Objective-C y Objective-C++ para escritorio y iphone. ¿Puede alguien resumir a alto nivel las diferencias entre LLVM, GCC, CLANG, CLANG-LLVM, WordFoo et. Alabama. y explicar qué son y cuándo deberíamos usar cada uno y para qué? Sería bueno tener enlaces a una explicación más detallada, pero realmente estoy buscando una descripción general de alto nivel.

Respuesta

53

En pocas palabras:

compiladores están básicamente divididos en dos partes. Uno es el front-end que contiene el analizador sintáctico y el análisis semántico para el lenguaje de programación. El front-end produce algún tipo de representación intermedia de su código. Luego está el backend que toma las cosas que el front-end produce, lo optimiza y eventualmente genera código ensamblador.

  • GCC: compilador conocido, contiene ambas interfaces para varios idiomas y el back-end para muchas arquitecturas de procesador
  • LLVM: un conjunto de back-ends para diversas arquitecturas (y otras cosas de bajo nivel)
  • clang: un nuevo front-end para C, Objective-C y C++; utiliza los back-ends LLVM. Obtendrá errores y advertencias más legibles de su compilador y tiempos de compilación más cortos. También puede encontrar incompatibilidades o errores; clang es un proyecto muy joven.
  • LLVM-GCC: front-end de GCC con el back-end de LLVM. El back-end de LLVM es más rápido que el de GCC.

clang's (Objetivo-) El soporte de C++ está lejos de ser completo, así que llama a llvm-gcc cuando encuentra un archivo de código fuente en C++. También contiene el analizador estático que ahora está integrado en Xcode. Algunas personas dicen que el back-end de LLVM genera un código mejor que el de GCC pero su millaje puede variar. LLVM también admite optimizaciones de tiempo de enlace (que puede habilitar en la configuración del proyecto de Xcode). Pueden producir código más rápido.

Apple quiere reemplazar a GCC con clang en el futuro porque tienen una política contra el código de licencia GPLv3 (GCC 4.2 es la última versión que tiene licencia bajo GPLv2).

+0

Sí, clang incluso muestra la columna del error, no solo la línea. –

+0

Respuesta impresionante: Cuando estoy * codificando * en Xcode y recibo una advertencia * amarilla, ¿eso es ruido? Si obtengo un error * rojo * ¿qué es eso? Si recibo un error después de ejecutar, es decir, durante * runtime * ¿ese es el LLVM que me está dando el error? – Honey

Cuestiones relacionadas