GCC vs clang / LLVM - her birinin artıları ve eksileri [kapalı]


20

GCC vs clang / LLVM'nin artıları ve eksileri nelerdir?


3
Artıları / Eksileri kimin için? LLVM, gülünç miktarda desteklenen mimarilere ihtiyacınız dışında, derleyiciler için arka uç olarak açıkça üstündür. Ama son kullanıcılardan bahsettiğinizi varsayıyorum.

Yanıtlar:


19

gcc çok olgun, kurulumu kolaydır (en azından çoğu sistem için) ve birçok sistem için varsayılan derleyicidir, bu nedenle birçok durumda insanlar farkında olmadan neredeyse yüklemiştir. Bir milyon mimariye taşındı, bu yüzden belirsiz donanımı hedeflemeniz gerekiyorsa kutudan çıkması çok daha muhtemel.

clang çok daha yeni. Özellikle C ++ şablonları için çok daha iyi hata mesajları üretir. Çoğu durumda, çok daha hızlı çalışır. Öncelikle bir kütüphane seti olarak inşa edilmiştir, bu nedenle aynı ön ucu kullanan, aynı girişleri anlayan vb.Gibi birkaç başka proje (örn. Kod analizörleri) vardır. ondan nasıl kod ürettiğiniz.


17
  1. Clang'ın hata raporlaması çok daha iyi. Örneğin, aradığınız işlev adında bir yazım hatası yaparsanız, Clang bunun muhtemelen bir yazım hatası olduğunu bildirir (ve doğru adı önerir), GCC ise bilinmeyen işlev adından şikayet eder.

  2. X86 / x86-64'ü hedeflerseniz GCC genellikle daha hızlı kod üretir. ARM için durum belirsizdir, genellikle Clang daha iyi optimize eder. Ayrıca, AFAIK Clang kod boyutu için optimizasyonu desteklemez.

  3. GCC çok fazla buluşsal yöntem kullanır. Bu, performans için iyidir (tipik bir durumda), ancak bazı kaynak düzeyinde optimizasyon yapmak istiyorsanız (ör. Döngü açma) korkunç. Küçük kaynak kodu değişiklikleri bile GCC'yi tamamen farklı bir çıktı oluşturabilir. Clang daha tahmin edilebilir ve genellikle beklediğiniz kodu üretir.

  4. Jerry Coffin'den farklı olarak, GCC'yi kaynaktan Clang'dan çok daha zor buluyorum. Clang'ın Başlangıç sayfasındaki prosedür her zaman benim için çalıştı. GCC için benzer kılavuz ilk denemede hiç çalışmadı. GCC'nin GMP, MPFR, MPC, Parma Polyhedra Kütüphanesi ve CLooG'nin belirli sürümlerine bağımlılıkları vardır ve belirli bir GCC sürümü için çalışacak sürümleri bulmak için birkaç yinelemeye ihtiyacım vardı (evet, bu kütüphanelerin son sürümlerini kullanmak işe yaramıyor ).

  5. Clang'ın GCC'den daha iyi test edildiğini hissediyorum. Sadece GCC'nin resmi sürümlerini kullanmama rağmen, bazen hatalı kod üretti. Clang için genellikle gövde versiyonunu kullanıyorum (tekrar, çünkü inşa edilmesi kolay), ama asla yanlış çıktı ürettiğini görmedim.

  6. GCC, Linux dünyasında neredeyse standarttır ve Linux yazılımlarında yaygın olarak kullanılan birçok standart dışı özellik ekler. Clang, GCC ile uyumlu olmaya çalışır, ancak bazen onları sessizce göz ardı eder. En önemlisi, Clang OpenMP'yi desteklemiyor. Bununla birlikte, GCC tarafından desteklenmeyen, ancak yararlı olabilecek uzantılara da sahiptir (örneğin, taşıma ile ekleme iç işlevleri __buildin_addc).

  7. Derleyici araştırması yapmak veya sadece nasıl çalıştığını merak etmek istiyorsanız, Clang / LLVM kaynak kodunu daha erişilebilir bulacaksınız. Clang / LLVM kodu sadece derleyici tarafından okunabilir değil, insan tarafından okunabilir.

  8. (AINAL beyanı geçerlidir) Clang / LLVM lisansı, kodla neler yapabileceğiniz konusunda daha fazla özgürlük sağlar, örneğin ticari veya kapalı kaynaklı ürünlerde kullanım. GCC çalışma zamanı kitaplıkları lisansı, Clang derleyici çalışma zamanı (compiler-rt kitaplığı) izin verilen MIT lisansı altındayken başka bir kısıtlama katmanı ekler.

Özet: programı geliştirirken Clang ile ve son derleme için GCC ile derleyin (ancak daha hızlı ve kırılmadığından emin olun). Derleyici araştırması yaparsanız Clang / LLVM ile devam edin.


İlginçtir, Clang'ın taşıma eklentisi içsel olduğunu hiç bilmiyordum. Ama öyle olmalı __builtin_add, değil __buildin_addc. Her neyse, Clang addctaşıma olarak karşılaştırmayı kullanarak geniş bir eklenti ile karşılaştığında üretmek için yeterince akıllı
phuclv

Yani __builtin_addcdeğil__buildin_addc
phuclv

Buradaki performans karşılaştırmaları güncel değil. Daha yakın zamandaki kıyaslamalara göre, clang hafif yarıdan fazla testlerde x86 / 64'te gcc'den daha hızlıdır (örn. Openbenchmarking.org/result/1605071-HA-GCCCLANG568 )
Jules

3

Yeni bir CPU mimariniz veya yeni optimizasyonlarınız varsa ve bunları GPL altında açmak istiyorsanız, gcc'ye katkıda bulunabilirsiniz. Bununla birlikte, gcc daha az modülerdir, bu nedenle kişinin modifikasyonlarını / eklemelerini eklemek için daha fazla çalışma gerekebilir. Açık kaynaklı bir projeye yeni mimarilere veya optimizasyonlara katkıda bulunmak istiyorsanız, ancak GPL olmayan bir lisans altında, bunları LLVM / clang'a katkıda bulunabilirsiniz. Hukuk departmanları sadece ikincisine izin veren şirketler var.


-3

Bugün (8/11/2011), GCC, Clang'dan çok daha fazla C ++ 0x özelliğini desteklemektedir. Bu özellikleri istiyorsanız, beyinsizdir; GCC sizin seçiminizdir.


Bu cevap araştırmamda belirtilen süre içinde doğru ve bilgilendirici.

8
Ama gerçekten çok iyi bir cevap değil, çünkü bugün itibariyle (28/07/2012) bu nokta artık geçerli değil. Clang, eğer varsa, GCC'den daha fazlasını destekler.
DeadMG
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.