web-dev-qa-db-ja.com

iOS開発におけるLLVMとGCC

最新のiOS SDKでは、Appleは3つのコンパイラオプションを提供します:GCC、Clang付きLLVM、LLVM-GCC。これら3つが何を意味するか、LLVMとClangが何であるかなどを私は理解しています。 iPhone開発者にとって、これが実際に何を意味するのかわかりません。2011年1月の時点で、現時点でどれを使用する必要がありますか?LLVMは十分に成熟していて、バグに頻繁につまずくことなく安全に使用できますか? LLVMへの切り替えには他の欠点がありますか?ある場合、速度の利点がLLVMを上回りますか?速度以外に切り替える理由は他にありますか?

48
Kuba Suder

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


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

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

37
Itai Ferber

わかりました、以下の答えのどれも全体の話を伝えていないと思いますので、これが私の質問に対する私の見解です:

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

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

  • Apple=がXcode 4をリリースする数ヶ月以内に、LLVM 2.0がデフォルトでXcodeに同梱されるバージョンになり、すべてのユーザーが安全に切り替えることができるはずです。

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

18
Kuba Suder

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


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

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

しかし、いずれにしても、今は避けてください;)

9
Daniel Dickison

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

4
Nicholas Riley

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

登録済みiOS開発者であれば、ほとんどのセッションを無料で http://developer.Apple.com/videos/wwdc/2010/ で見ることができます。

3
Paul Alexander