48

最新のiOSSDKでは、Appleは3つのコンパイラオプションを提供しています。GCC、Clangを使用したLLVM、およびLLVM-GCCです。私はこれらの3つの意味、LLVMとClangが何であるかなどを多かれ少なかれ理解しています。私が知らないのは、これがiPhone開発者にとって実際に何を意味するのかということです。2011年1月の時点で、現時点でこれらのどれを使用する必要がありますか?LLVMは十分に成熟しているので、バグに頻繁に遭遇することなく安全に使用できますか?LLVMへの切り替えには他に不利な点はありますか?もしそうなら、速度の利点はそれらを上回りますか?速度以外に切り替える理由はありますか?

4

5 に答える 5

37

更新:人々はまだこの答えを見つけているので、私は適切な更新を提供する必要があると感じています。これまでのところ、Clangがプログラミングの際の絶対的な道であり、Clangが新しいバージョンのXcodeのデフォルトのコンパイラであり、ARCと新しい言語構造(配列と辞書の添え字、リテラルなど)をサポートしていることは明らかです。 。GCCでコンパイルする理由はほとんどありません。また、ARCと新機能を使用するコードベースの場合、プレーンGCCを使用することはもはや適切ではないか不可能です(LLVM-GCCはこれらの機能をサポートする可能性がありますが、Clangが完全に使用できるようになったためClangに勝る利点はありません。安定)。


現在(Xcode 4.0ベータにLLVM-2.0が含まれている)、LLVMは実稼働コードで使用するのに十分成熟しています。GCCよりも少し速くコンパイルされ、より高速なコードを生成するので、できる限り使用してください(より良いものが利用できる場合は、GCCを避けてください)。標準のXcode3.2.5インストールにはLLVM-1.6(最新ではない)が含まれているため、GCCとLLVMの間に顕著な違いがあるかどうかを確認するためにいくつかの速度テストを実行するか、ソースからClangをコンパイルして最新バージョンを取得することをお勧めします。

基本的に、GCCはもう必要ありません。LLVM+Clangで十分です。

于 2011-01-04T00:05:36.993 に答える
18

わかりました。以下の回答のいずれも全体像を示しているとは思わないので、私の質問に対する回答を以下に示します。

  • LLVMはGCCよりも高速にコードをコンパイルし、より高速に実行されるコードを作成する可能性があり、ClangフロントエンドはGCCよりも正確なエラーメッセージを提供します。したがって、切り替える理由は間違いありません。

  • とはいえ、最新の安定したXcode(LLVM 1.6)で提供されるバージョンは、まだ100%安定していません。運が悪ければ、いくつかのマイナーなバグに遭遇する可能性があります。したがって、安全を確保したい場合は、ソースから最新のLLVM(2.0)をコンパイルするか、今後数か月間GCCを使用する必要があります。

  • 数か月以内に、おそらくAppleがXcode 4をリリースすると、LLVM 2.0がデフォルトでXcodeに同梱されるバージョンになり、それから私たち全員が安全にそれに切り替えることができるはずです。

回答してくださった皆様、ありがとうございました。何かおかしいことがあったら、遠慮なく訂正してください。

于 2011-01-07T18:08:34.217 に答える
9

LLVM 2.0でコンパイルするとiOS3.1.3を実行している元のiPhoneで起動するとクラッシュするように見えるアプリがありますが、LLVM-GCCでは問題なく動作します。私はiOS3.1に戻ることをサポートしているので、これは致命的です。LLVM 2.0と私が持っている特定のコードとの間に相互作用があるかどうかはわかりませんが、レガシーデバイスで徹底的にテストできない限り、iOS 3.xをサポートする必要がある場合は、LLVMを避けるのが最善のようです。


更新:問題はiOSバージョンではなくデバイスハードウェアにあるようです。第1世代と第2世代のiOSデバイスが影響を受けているようです:オリジナルのiPhone、iPhone 3G、および第1世代と第2世代のiPodTouch。これは、ARMv6アーキテクチャに限定されていることを意味すると思います。

また、Xcodeのデバッガーを介してデバッグビルドを実行することは正常に機能しますが、iTunesを介してインストールされたリリースビルドは機能しません。したがって、CPUアーキテクチャとLLVM2.0の最適化レベルの間の相互作用である可能性があります。

しかし、いずれにせよ、今のところ避けてください;)

于 2011-04-03T23:08:38.353 に答える
4

Clangに切り替えるもう1つの主な理由は、より正確で(列番号と行番号の範囲)、読みやすいエラーメッセージです。

于 2011-01-04T00:11:39.150 に答える
3

最新のWWDC10の間に、彼らは開発者に最新のLLVMコンパイラーを使用するように勧めることを強調しました。彼らがそれを詳細にカバーした正確な部分を忘れています-「Xcodeの新機能」の1つです。基本的に、可能な場合はLLVM-2.0を使用することをお勧めします。それ以外の場合は、LLVM-GCCを使用し、GCCのみを完全に回避することをお勧めします。

登録済みのiOS開発者の場合は、 http://developer.apple.com/videos/wwdc/2010/でほとんどのセッションを無料で表示できます。

于 2011-01-03T23:39:22.513 に答える