2009-10-11 21 views
38

README dołączony do nowego Xcode 3.2.1 ten tydzień mówi co następuje:Xcode 3.2.1 GCC dzyń i LLVM Demistyfikacja

  • statyczna analiza kodu jest w pełni zintegrowany z Xcode IDE poprzez budować i analizować opcji w menu Build lub w niestandardowych ustawieniach kompilacji
  • GCC 4.2 jest domyślnym kompilatorem systemowym dla 10.6 SDK
  • Opcjonalny kompilator LLVM jest zawarty w dwóch różnych frontach - kompilator Clang jest wiodącym analizatorem składarek, który oferuje dramatycznie poprawione czasy kompilacji. Aby uzyskać maksymalną zgodność, kompilator GCC LLVM wykorzystuje back-end LLVM z parserem GCC 4.2.
  • Nowy opcjonalny kompilator Clang-LLVM 1.0 używa znacznie szybszego parsera Clang front-end połączonego z back-endowym kompilatorem LLVM do szybkiego kompilowania i szybkiego kodu wykonywalnego. Wiele projektów skorzysta z tej kombinacji kompilatorów, chociaż GCC 4.2 jest nadal domyślnym systemem. Kompilator Clang-LLVM 1.0 powróci do używania LLVM-GCC 4.2, gdy napotka kod C++.

Nasza firma ma istniejące projekty, które są czyste C, Objective-C i Objective-C++ na komputery stacjonarne i iphone. Czy ktoś może podsumować na wysokim poziomie różnice między LLVM, GCC, CLANG, CLANG-LLVM, WordFoo et. glin. i wyjaśnić, czym one są i kiedy powinniśmy używać każdego i po co? Byłoby miło mieć linki do bardziej szczegółowych wyjaśnień, ale tak naprawdę szukam tylko ogólnego przeglądu.

Odpowiedz

53

W skrócie:

Kompilatory są zasadniczo podzielić na dwie części. Jeden to front-end, który zawiera analizator składni i analizę semantyczną dla języka programowania. Front-end wytwarza jakąś pośrednią reprezentację twojego kodu. Następnie jest backend, który przenosi materiał wyprodukowany przez front-end, optymalizuje go i ostatecznie generuje kod zespołu.

  • GCC: dobrze znany kompilator, zawiera zarówno front-end dla różnych języków i back-końce na wielu architekturach procesorów
  • LLVM: zestaw tylnych końców dla różnych architektur (i inne rzeczy niskiego poziomu)
  • clang: nowy front-end dla C, Objective-C i C++; używa back-endów LLVM. Otrzymasz bardziej czytelne błędy i ostrzeżenia z kompilatora oraz krótsze czasy kompilacji. Możesz również napotkać niezgodności lub błędy; clang to bardzo młody projekt.
  • LLVM-GCC: Front-end GCC z back-endem LLVM. Back-end LLVM jest szybszy niż GCC.

Clang (Objective-) Obsługa C++ jest daleka od zakończenia, więc wywołuje llvm-gcc po napotkaniu pliku źródłowego C++. Zawiera również analizator statyczny, który jest teraz zintegrowany z Xcode. Niektórzy twierdzą, że back-end LLVM generuje lepszy kod niż GCC, ale twój przebieg może się różnić. LLVM obsługuje również optymalizacje czasu łącza (które można włączyć w ustawieniach projektu Xcode). Mogą wytwarzać szybszy kod.

Firma Apple chce w przyszłości zastąpić GCC klang, ponieważ ma on politykę przeciwko kodowi licencjonowanemu na licencji GPLv3 (GCC 4.2 to ostatnia wersja objęta licencją GPLv2).

+0

Tak, klang pokazuje nawet kolumnę błędu, a nie tylko linię. –

+0

Awesome Odpowiedź: Kiedy jestem * kodowanie * w Xcode i otrzymuję * żółty * ostrzeżenie jest to clang? Jeśli dostaję * czerwony * błąd, co to jest? Jeśli pojawia się błąd po uruchomieniu, to znaczy podczas * runtime * jest LLVM, który daje mi błąd? – Honey