GCC vs clang / LLVM - ข้อดีและข้อเสียของแต่ละ [ปิด]


20

ข้อดีและข้อเสียของ GCC vs clang / LLVM คืออะไร


3
ข้อดี / ข้อเสียสำหรับใคร? LLVM นั้นเหนือกว่าอย่างชัดเจนในฐานะแบ็กเอนด์สำหรับคอมไพเลอร์ยกเว้นว่าคุณต้องการสถาปัตยกรรมที่รองรับจำนวนมาก แต่ฉันคิดว่าคุณกำลังพูดถึงผู้ใช้ปลายทาง

คำตอบ:


19

gcc เป็นผู้ใหญ่มากติดตั้งง่าย (อย่างน้อยสำหรับระบบส่วนใหญ่) และเป็นคอมไพเลอร์เริ่มต้นสำหรับระบบจำนวนมากดังนั้นในหลาย ๆ กรณีผู้คนติดตั้งมันเกือบจะโดยที่ไม่รู้ตัว มันถูกส่งไปยังสถาปัตยกรรม zillion ดังนั้นจึงมีแนวโน้มที่จะทำงานนอกกรอบหากคุณต้องกำหนดเป้าหมายฮาร์ดแวร์ที่คลุมเครือ

เสียงดังกราวนั้นใหม่กว่ามาก มันมักสร้างข้อความแสดงข้อผิดพลาดที่ดีกว่ามากโดยเฉพาะอย่างยิ่งสำหรับแม่แบบ C ++ ในหลายกรณีมันทำงานเร็วกว่ามาก มันถูกสร้างขึ้นเป็นหลักเป็นชุดของไลบรารีดังนั้นจึงมีโครงการอื่นอีกไม่กี่อย่าง (เช่นตัววิเคราะห์รหัส) ที่ใช้ front-end เดียวกันเข้าใจอินพุตเดียวกันและอื่น ๆ การใช้ llvm เนื่องจากแบ็คเอนด์นั้นให้ความยืดหยุ่นเป็นพิเศษใน คุณสร้างรหัสได้อย่างไร


17
  1. เสียงดังกราวมีการรายงานข้อผิดพลาดที่ดีกว่ามาก เช่นถ้าคุณพิมพ์ผิดในชื่อฟังก์ชั่นที่คุณโทรเสียงดังกราวจะรายงานว่านี่น่าจะเป็นตัวพิมพ์ผิด (และแนะนำชื่อที่ถูกต้อง) ในขณะที่ GCC จะบ่นเกี่ยวกับชื่อฟังก์ชั่นที่ไม่รู้จัก

  2. โดยทั่วไปแล้ว GCC จะสร้างรหัสได้เร็วขึ้นหากคุณกำหนดเป้าหมายเป็น x86 / x86-64 สำหรับ ARM สถานการณ์นั้นคลุมเครือบ่อยครั้งที่เสียงดังกราวจะปรับให้เหมาะสมที่สุด นอกจากนี้ AFAIK Clang ไม่สนับสนุนการปรับให้เหมาะสมสำหรับขนาดโค้ด

  3. GCC ใช้การวิเคราะห์พฤติกรรมจำนวนมาก สิ่งนี้เป็นสิ่งที่ดีสำหรับประสิทธิภาพ (ในกรณีทั่วไป) แต่น่ากลัวถ้าคุณต้องการเพิ่มประสิทธิภาพระดับซอร์ส (เช่นการวนลูป) แม้แต่การเปลี่ยนแปลงซอร์สโค้ดขนาดเล็กก็สามารถทำให้ GCC สร้างผลลัพธ์ที่แตกต่างอย่างสิ้นเชิง เสียงดังกราวสามารถคาดเดาได้มากขึ้นและมักจะสร้างรหัสที่คุณคาดหวัง

  4. ซึ่งแตกต่างจาก Jerry Coffin ฉันพบว่าการสร้าง GCC จากแหล่งที่มายากกว่า Clang มาก ขั้นตอนจากหน้าเริ่มต้นของ Clangใช้ได้สำหรับฉันเสมอ คู่มือที่คล้ายกันสำหรับ GCCไม่เคยทำงานในครั้งแรก GCC มีการพึ่งพารุ่นเฉพาะของ GMP, MPFR, MPC, Parma Polyhedra Library และ CLooG และฉันต้องการการวนซ้ำหลายครั้งเพื่อค้นหารุ่นที่จะใช้งานได้กับ GCC รุ่นเฉพาะ (ใช่โดยใช้รุ่นล่าสุดของไลบรารีเหล่านั้นไม่ทำงาน )

  5. ฉันมีความรู้สึกว่าเสียงดังกราวทดสอบได้ดีกว่า GCC แม้ว่าฉันจะใช้ GCC รุ่นเป็นทางการ แต่บางครั้งมันก็สร้างรหัสที่ผิดพลาด สำหรับ Clang ฉันมักจะใช้รุ่นลำตัว (อีกครั้งเพราะมันง่ายต่อการสร้าง) แต่ฉันไม่เคยเห็นว่ามันสร้างเอาต์พุตผิด

  6. GCC เกือบเป็นมาตรฐานในโลกของ Linux และเพิ่มคุณสมบัติที่ไม่ได้มาตรฐานจำนวนมากซึ่งใช้กันอย่างแพร่หลายในซอฟต์แวร์ Linux เสียงดังกังวานพยายามที่จะเข้ากันได้กับ GCC แต่บางครั้งมันก็ไม่สนใจพวกเขา สิ่งสำคัญที่สุดคือเสียงดังกราวไม่สนับสนุน OpenMP อย่างไรก็ตามมีส่วนขยายที่ไม่ได้รับการสนับสนุนจาก GCC แต่อาจมีประโยชน์ (เช่นฟังก์ชั่นที่เพิ่มเข้ามาด้วย __buildin_addc)

  7. หากคุณต้องการทำการวิจัยคอมไพเลอร์หรืออยากรู้ว่ามันทำงานอย่างไรคุณจะพบว่าซอร์สโค้ด Clang / LLVM สามารถเข้าถึงได้ง่ายขึ้น รหัส Clang / LLVM สามารถอ่านได้โดยมนุษย์

  8. (มีการปฏิเสธโดย AINAL) ใบอนุญาต Clang / LLVM ช่วยให้คุณมีอิสระมากขึ้นเกี่ยวกับสิ่งที่คุณสามารถทำได้กับรหัสเช่นใช้ในเชิงพาณิชย์หรือผลิตภัณฑ์ที่มาปิด ใบอนุญาตสำหรับไลบรารีรันไทม์ของ GCC เพิ่มข้อ จำกัด อีกชั้นหนึ่งขณะที่ Clang compiler runtime (compiler-rt ไลบรารี่) อยู่ภายใต้ใบอนุญาตของ MIT

สรุป: รวบรวมกับ Clang เมื่อคุณพัฒนาโปรแกรมและกับ GCC สำหรับการสร้างขั้นสุดท้าย (แต่ต้องแน่ใจว่ามันเร็วขึ้นและไม่แตก) ติดกับ Clang / LLVM ถ้าคุณทำการวิจัยคอมไพเลอร์


ที่น่าสนใจฉันไม่เคยรู้มาก่อนว่าเสียงดังกังวานนั้นมีสิ่งที่อยู่ภายในเพิ่มขึ้นด้วย แต่มันควรจะเป็นไม่ได้__builtin_add __buildin_addcอย่างไรก็ตามเสียงดังกราวเป็นพอสมาร์ทเพื่อสร้างaddcเมื่อมันพบกว้างเพิ่มการเปรียบเทียบการใช้เป็นกระเป๋าถือ
phuclv

ฉันหมายถึง__builtin_addcไม่__buildin_addc
phuclv

การเปรียบเทียบประสิทธิภาพที่นี่ล้าสมัย ตามมาตรฐานล่าสุด clang เร็วกว่า gcc ใน x86 / 64 ในการทดสอบมากกว่าครึ่งเล็กน้อย (เช่นopenbenchmarking.org/result/1605071-HA-GCCCLANG568 )
Jules

3

หากคุณมีสถาปัตยกรรม CPU ใหม่หรือการเพิ่มประสิทธิภาพใหม่และต้องการเปิดแหล่งที่มาภายใต้ GPL คุณสามารถมีส่วนร่วมกับ gcc อย่างไรก็ตาม gcc นั้นเป็นมอดุลาร์น้อยกว่าดังนั้นสิ่งนี้อาจเกี่ยวข้องกับการทำงานเพิ่มเติมเพื่อเพิ่มการดัดแปลง / เพิ่มเติม หากคุณต้องการมีส่วนร่วมกับสถาปัตยกรรมใหม่หรือการเพิ่มประสิทธิภาพให้กับโครงการโอเพนซอร์ซ แต่ภายใต้ใบอนุญาตที่ไม่ใช่ GPL คุณสามารถมีส่วนร่วมกับ LLVM / เสียงดังกราว มี บริษัท ที่มีอยู่ซึ่งแผนกกฎหมายอนุญาตให้หลัง


-3

วันนี้ (8/11/2554) GCC สนับสนุนฟีเจอร์ C ++ 0x มากกว่าที่ Clang ทำ หากคุณต้องการคุณสมบัติเหล่านั้นมันเป็นเกมง่ายๆ GCC เป็นตัวเลือกของคุณ


คำตอบนี้ถูกต้องและให้ข้อมูลภายในกรอบเวลาที่กำหนดตามการวิจัยของฉัน

8
แต่ไม่ใช่คำตอบที่ดีมากเพราะ ณ วันนี้ (28/07/2012) จุดนี้ไม่ถูกต้องอีกต่อไป เสียงดังกังวานสนับสนุนมากกว่า GCC หากมีสิ่งใด
DeadMG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.