iphone objective-c compiler-construction llvm clang

iphone - LLVM vs. GCC para desarrollo de iOS



clang download (5)

En el último iOS SDK, Apple ofrece tres opciones de compilación: GCC, LLVM con Clang y LLVM-GCC. Entiendo más o menos lo que significan estos 3, qué son LLVM y Clang, y así sucesivamente. Lo que no sé es qué significa esto en la práctica para los desarrolladores de iPhone. ¿Cuál de estos debería usar en este momento, a partir de enero de 2011? ¿El LLVM es lo suficientemente maduro como para poder usarlo de forma segura sin tropezar con insectos con demasiada frecuencia? ¿Cambiar a LLVM tiene alguna otra desventaja? Si lo hace, ¿la ventaja de la velocidad los supera? ¿Hay alguna otra razón para cambiar excepto la velocidad?


Durante la última WWDC10, hicieron un punto de alentar a los desarrolladores a utilizar el compilador LLVM más actual. Olvidé el tratado exacto que lo cubrieron en detalle: uno de los "nuevos en Xcode". Básicamente sugieren usar LLVM-2.0 cuando sea posible, de lo contrario LLVM-GCC y evitar GCC solo por completo.

Si eres un desarrollador de iOS registrado, puedes ver la mayoría de las sesiones gratis en http://developer.apple.com/videos/wwdc/2010/


Ok, creo que ninguna de las respuestas a continuación cuentan la historia completa, así que aquí está mi respuesta a mi pregunta:

  • LLVM compila el código más rápido que GCC, puede crear código que se ejecuta más rápido, y la interfaz Clang proporciona mensajes de error más precisos que GCC, por lo que definitivamente hay razones para cambiar;

  • Dicho esto, la versión provista con el último Xcode estable (LLVM 1.6) aún no es 100% estable, puedes tener algunos errores menores si no tienes suerte. Por lo tanto, si desea estar seguro, debe compilar el último LLVM (2.0) de la fuente o adherirse a GCC durante los próximos meses;

  • en unos meses, probablemente cuando Apple lance Xcode 4, LLVM 2.0 será la versión que se envíe con Xcode por defecto, y entonces todos deberíamos poder cambiar a ella de manera segura.

Gracias a todos los que respondieron, siéntete libre de corregirme si tengo algo mal.


Otra razón importante para cambiar a Clang es más precisa (rangos de números de columna y línea) y mensajes de error legibles.


Tengo una aplicación que parece fallar en el lanzamiento en el iPhone original que ejecuta iOS 3.1.3 cuando se compiló con LLVM 2.0, pero funciona perfectamente con LLVM-GCC. Apoyo back to iOS 3.1 así que esto es fatal. No estoy seguro de si hay una interacción entre LLVM 2.0 y algún código específico que tengo, pero parece mejor evitar LLVM si necesita soportar iOS 3.x a menos que pueda probar a fondo en dispositivos heredados.

Actualización : parece que el problema es con el hardware del dispositivo en lugar de la versión de iOS. Los dispositivos iOS de 1ª y 2ª generación parecen verse afectados: iPhone original, iPhone 3G y iPod Touch de 1ª y 2ª generación. Creo que esto significa que está limitado a las arquitecturas ARMv6.

Además, ejecutar una compilación de depuración a través del depurador de Xcode funciona bien, mientras que las compilaciones de lanzamiento instaladas a través de iTunes no funcionan. Por lo tanto, podría tratarse de una interacción entre la arquitectura de la CPU y el nivel de optimización con LLVM 2.0.

Pero en cualquier caso, evite por ahora;)


Actualización: debido a que las personas todavía encuentran esta respuesta, siento que debería proporcionar una actualización adecuada. Por ahora, espero que esté claro que Clang es absolutamente el camino a seguir cuando se programa, con Clang siendo el compilador predeterminado en las versiones más nuevas de Xcode y soportando ARC y construcciones de lenguaje nuevas y futuras (matrices y subíndices de diccionarios, literales, etc.) . Ya casi no hay ninguna razón para compilar con GCC, y para las bases de código que usan ARC y nuevas características, usar GCC simple ya no es relevante o posible (LLVM-GCC puede admitir estas características, pero no ofrece ninguna ventaja sobre Clang ahora que Clang está completamente estable).

Por ahora (con LLVM-2.0 incluido en la versión beta de Xcode 4.0), LLVM es lo suficientemente maduro para el uso del código de producción. Se compila un poco más rápido que GCC y produce código más rápido, así que úsalo siempre que puedas (más o menos, trata de evitar GCC si hay algo mejor disponible). La instalación estándar de Xcode 3.2.5 contiene LLVM-1.6 (no es la última), así que recomendaría ejecutar algunas pruebas de velocidad para ver si hay una diferencia notable entre GCC y LLVM, o compilar Clang desde el origen y obtener la última versión.

Básicamente, ya no hay necesidad de GCC, LLVM + Clang es más que suficiente.