2009-10-11 15 views
38

Le readme inclus dans le nouveau Xcode 3.2.1 cette semaine dit ce qui suit:Xcode 3.2.1 GCC CLANG et LLVM démystification

  • analyse de code statique est entièrement intégré dans le Xcode IDE via la construction et l'option Analyser dans le menu Générer ou via commande paramètres de construction
  • GCC 4.2 est le compilateur par défaut du système pour le 10.6 SDK
  • le compilateur en option LLVM est inclus en utilisant deux extrémités avant différent - le compilateur Clang est un analyseur de pointe qui offre considérablement temps de compilation améliorés. Pour une compatibilité maximale, le compilateur GLC LLVM utilise le back-end LLVM avec l'analyseur GCC 4.2.
  • Le nouveau compilateur Clang-LLVM 1.0 optionnel utilise l'analyseur frontal Clang beaucoup plus rapide couplé au compilateur back-end LLVM pour les compilations rapides et le code exécutable rapide. De nombreux projets bénéficieront de cette combinaison de compilateurs, bien que GCC 4.2 soit toujours la valeur par défaut du système. Le compilateur Clang-LLVM 1.0 utilisera LLVM-GCC 4.2 lorsqu'il rencontrera du code C++.

Notre société a des projets existants qui sont purs C, Objective-C, et Objective-C++ pour le bureau et l'iphone. Quelqu'un peut-il résumer à un niveau élevé les différences entre LLVM, GCC, CLANG, CLANG-LLVM, WordFoo et. Al. et expliquer ce qu'ils sont et quand nous devrions utiliser chacun et pour quoi? Ce serait bien d'avoir des liens vers des explications plus détaillées, mais je suis vraiment à la recherche d'un aperçu de haut niveau.

Répondre

53

En bref:

Compilateurs sont essentiellement divisés en deux parties. L'un étant le frontal qui contient l'analyse parser et sémantique pour le langage de programmation. Le frontal produit une sorte de représentation intermédiaire de votre code. Ensuite, il y a le backend qui prend les choses produites par le front-end, l'optimise et génère finalement du code d'assemblage.

  • GCC: compilateur bien connu, contient à la fois des frontaux pour différentes langues et des dorsaux pour de nombreuses architectures de processeurs
  • LLVM: un ensemble de back-end pour différentes architectures (et d'autres choses de bas niveau)
  • clang: une nouvelle interface pour C, Objective-C et C++; utilise les back-ends LLVM. Vous obtiendrez des erreurs et des avertissements plus lisibles de votre compilateur et des temps de compilation plus courts. Vous pourriez également rencontrer des incompatibilités ou des bogues; Clang est un projet très jeune.
  • LLVM-GCC: frontal de GCC avec le back-end de LLVM. Le back-end de LLVM est plus rapide que celui de GCC.

Le support C++ de clang (Objective-) est loin d'être terminé, il appelle donc llvm-gcc lorsqu'il rencontre un fichier source C++. Il contient également l'analyseur statique qui est maintenant intégré dans Xcode. Certaines personnes disent que le back-end de LLVM génère un meilleur code que celui de GCC, mais votre kilométrage peut varier. LLVM prend également en charge les optimisations de liaison (que vous pouvez activer dans les paramètres de projet de Xcode). Ils peuvent produire un code plus rapide. Apple veut remplacer GCC par un clang dans le futur car il a une politique contre le code sous licence GPLv3 (GCC 4.2 est la dernière version sous licence GPLv2).

+0

Oui, clang affiche même la colonne de l'erreur, pas seulement la ligne. –

+0

Impressionnant Réponse: Quand je * code * dans Xcode et que je reçois un avertissement * jaune *, est-ce clang? Si je reçois une erreur * rouge *, qu'est-ce que c'est? Si j'obtiens une erreur après avoir exécuté i.e. pendant * runtime *, est ce LLVM qui me donne l'erreur? – Honey