Dans le dernier SDK iOS, Apple fournit trois options de compilateur: GCC, LLVM avec Clang et LLVM-GCC. Je comprends plus ou moins ce que ces 3 veux dire, ce que LLVM et Clang sont, et ainsi de suite. Ce que je ne sais pas est ce que cela signifie dans la pratique pour les développeurs iPhone. Laquelle de ces dois-je utiliser à ce stade, à compter de janvier 2011? Est LLVM suffisamment matures pour que je puisse l'utiliser en toute sécurité sans trébucher sur les bugs trop souvent? Ne commutation de LLVM avez d'autres inconvénients? Si c'est le cas, l'avantage de vitesse emportent sur eux? Existe-il d'autres raisons pour passer à l'exception de la vitesse?
Réponses
Trop de publicités?Mise à jour: Parce que les gens sont toujours à trouver cette réponse, je me sens comme si je devais proposer une mise à jour. Maintenant, j'espère que c'est clair que Clang est absolument la voie à suivre lors de la programmation, avec Clang être le compilateur par défaut dans les nouvelles versions de Xcode et le soutien de l'ARC et de nouveaux et à venir, les constructions de langage (tableau et dictionnaire subscripting, coquilles, etc.). Il n'y a presque absolument aucune raison pour compiler avec GCC, et de plus, pour des bases de codes à l'aide de l'ARC et de nouvelles fonctionnalités, à l'aide de la plaine de GCC n'est plus pertinente ou possible (LLVM-GCC peut prendre en charge ces fonctionnalités, mais il ne fournit aucun avantage sur Clang maintenant que Clang est complètement stable).
Maintenant (avec LLVM-2.0 inclus dans Xcode 4.0 bêta), LLVM est assez mature pour la production de code à utiliser. Il compile un peu plus vite que GCC, et produit plus rapidement le code, afin de l'utiliser dès que vous le pouvez (assez bien, essayez d'éviter de GCC si quelque chose de mieux est disponible). La norme Xcode 3.2.5 installer contient LLVM-1.6 (pas la dernière), donc je recommande soit de l'exécution de certains tests de vitesse pour voir si il y a une différence notable entre la GCC et LLVM, ou de compilation de Bruit à partir de la source et d'obtenir la dernière version.
Essentiellement, il n'y a pas besoin de GCC, LLVM + Clang est plus que suffisant.
Ok, je pense qu'aucune des réponses ci-dessous raconter toute l'histoire, voici donc mon point de vue sur une réponse à ma question:
LLVM compile le code plus rapide que GCC, peut créer un code qui s'exécute plus rapidement, et le Cliquetis frontend fournit plus précis des messages d'erreur de GCC – donc il y a certainement des raisons de commutation;
cela dit, la version fournie avec la dernière version stable de Xcode LLVM (1.6) n'est pas 100% stable encore, vous pouvez exécuter dans quelques bugs mineurs si vous êtes malchanceux. Donc, si vous voulez être en sécurité, vous devez compiler la dernière VERSION (2.0) de la source, ou s'en tenir à GCC pour les prochains mois;
dans quelques mois, peut-être, quand Apple sort Xcode 4, VERSION 2.0 sera la version fourni avec Xcode par défaut, et alors nous devrions tous être en mesure de passer en toute sécurité.
Merci à tous ceux qui ont répondu, n'hésitez pas à me corriger si j'ai eu quelque chose de mal.
J'ai une application qui semble crash au lancement de l'original de l'iPhone sous iOS 3.1.3 lorsqu'il est compilé avec la VERSION 2.0, mais fonctionne très bien avec LLVM-GCC. J'ai le soutien de retour à iOS 3.1 c'est donc fatale. Vous ne savez pas si il y a une interaction entre la VERSION 2.0 et certains de code que j'ai, mais il semble préférable d'éviter de LLVM si vous avez besoin de soutien iOS 3.x, sauf si vous pouvez le tester à fond sur les anciens appareils.
Mise à jour: Il semble que le problème est avec le matériel du périphérique plutôt que la version iOS. 1ère et 2ème génération d'appareils iOS semble être touchés: le premier iPhone, iPhone 3G, et de la 1ère et de 2ème génération iPod Touch. Je crois que cela signifie qu'il est limité à ARMv6 architectures.
En outre, l'exécution d'une version de débogage via Xcode du débogueur fonctionne très bien, tandis que les versions release installé via iTunes ne le font pas. Donc, il pourrait y avoir une interaction entre l'architecture du PROCESSEUR et l'optimisation de niveau avec la VERSION 2.0.
Mais dans tous les cas, évitez pour l'instant ;)
Au cours de la dernière WWDC10 ils ont fait un point d'encourager les développeurs, le plus courant compilateur LLVM. J'oublie l'exacte des voies qu'ils couverts en détail - l'un des "nouveaux dans Xcode. En gros, ils suggèrent l'utilisation de LLVM-2.0 lorsque cela est possible, sinon LLVM-GCC et pour éviter de GCC seul complètement.
Si vous êtes inscrit développeur iOS, vous pouvez consulter la plupart des séances gratuites à http://developer.apple.com/videos/wwdc/2010/