อะไรคือความแตกต่างหลักระหว่าง 'gc' และ 'gccgo'


89

อะไรคือความแตกต่างหลักระหว่างคอมไพเลอร์ Go ยอดนิยมสองตัวคือ 'gc' และ 'gccgo' สร้างประสิทธิภาพ? ประสิทธิภาพรันไทม์? ตัวเลือกบรรทัดคำสั่ง? ใบอนุญาต?

ฉันไม่ได้มองหาความคิดเห็นว่าข้อใดดีที่สุดเป็นเพียงภาพรวมพื้นฐานของความแตกต่างดังนั้นฉันจึงสามารถตัดสินใจได้ว่าสิ่งใดดีที่สุดสำหรับความต้องการ


3
สิ่งนี้เปลี่ยนแปลงไปอย่างไรเมื่อเวลาผ่านไป? ตอนนี้ในปี 2019
Leo Gallucci

คำตอบ:


110

คุณสามารถดูเพิ่มเติมได้ใน " การตั้งค่าและใช้งาน gccgo ":

gccgo คอมไพเลอร์สำหรับภาษา Go คอมไพเลอร์ gccgo เป็นส่วนหน้าใหม่สำหรับ GCC
โปรดทราบว่า gccgo ไม่ใช่คอมไพเลอร์ gc

ตามที่อธิบายไว้ใน " Gccgo in GCC 4.7.1 " (กรกฎาคม 2555)

ภาษา Go ถูกกำหนดโดยข้อมูลจำเพาะเสมอไม่ใช่การใช้งาน ทีม Go ได้เขียนคอมไพเลอร์ที่แตกต่างกันสองตัวที่ใช้ข้อมูลจำเพาะนั้น: gc และ gccgo

  • Gc เป็นคอมไพเลอร์ดั้งเดิมและเครื่องมือ go ใช้โดยค่าเริ่มต้น
  • Gccgo เป็นการใช้งานที่แตกต่างกันโดยมีจุดเน้นที่แตกต่างกัน

เมื่อเทียบกับ gc แล้ว gccgo จะคอมไพล์โค้ดได้ช้ากว่า แต่รองรับการเพิ่มประสิทธิภาพที่มีประสิทธิภาพมากกว่าดังนั้นโปรแกรมที่เชื่อมต่อกับ CPU ที่สร้างโดย gccgo มักจะทำงานได้เร็วกว่า

นอกจากนี้:

  • คอมไพเลอร์ gc รองรับเฉพาะโปรเซสเซอร์ยอดนิยม: x86 (32 บิตและ 64 บิต) และ ARM
  • อย่างไรก็ตาม Gccgo รองรับโปรเซสเซอร์ทั้งหมดที่ GCC รองรับ
    โปรเซสเซอร์เหล่านี้บางตัวไม่ได้รับการทดสอบอย่างละเอียดสำหรับ gccgo แต่มีหลายตัวเช่น x86 (32 บิตและ 64 บิต), SPARC, MIPS, PowerPC และแม้แต่ Alpha
    Gccgo ยังได้รับการทดสอบบนระบบปฏิบัติการที่คอมไพเลอร์ gc ไม่รองรับโดยเฉพาะอย่างยิ่ง Solaris

หากคุณติดตั้งคำสั่งไปจากการเปิดตัวไปมาตรฐานแล้วมันสนับสนุน gccgo ผ่านทางตัวเลือก:-compilergo build -compiler gccgo myprog


ในระยะสั้น: gccgo: การเพิ่มประสิทธิภาพมากขึ้น, การประมวลผลมากขึ้น


อย่างไรก็ตามตามความคิดเห็นของOneOfOne ( แหล่งที่มา ) มักจะมีการซิงโครไนซ์ระหว่าง go ที่สนับสนุนโดย gccgo และ go รุ่นล่าสุด:

gccgo รองรับเฉพาะเวอร์ชัน go v1.2ดังนั้นหากคุณต้องการอะไรใหม่ ๆ ใน 1.3 / 1.4 (tip) gccgo ไม่สามารถใช้งานได้ -

GCC ปล่อย 4.9จะมีการไป 1.2 (ไม่ 1.3) รุ่น gccgo
กำหนดการเผยแพร่สำหรับโครงการ GCC และ Go ไม่ตรงกันซึ่งหมายความว่า 1.3 จะพร้อมใช้งานในสาขาการพัฒนา แต่ GCC รุ่นถัดไป 4.10 มีแนวโน้มที่จะมี gccgo เวอร์ชัน Go 1.4


twotwotwoกล่าวถึงในความคิดเห็นภาพนิ่งของงานนำเสนอแบรดฟิทซ์

gccgo สร้างรหัสที่ดีมาก
... แต่ขาดการวิเคราะห์การหลบหนี: ฆ่าประสิทธิภาพด้วยการจัดสรรขนาดเล็กจำนวนมาก + ขยะ
... GC ไม่แม่นยำ ไม่ดีสำหรับ 32 บิต

twotwotwo เพิ่ม:

อีกสไลด์กล่าวว่าการสร้างรหัส ARM ที่ไม่ใช่ gccgo นั้นไม่เป็นระเบียบ
สมมติว่าเป็นตัวเลือกที่น่าสนใจสำหรับโครงการของคุณอาจเปรียบเทียบไบนารีสำหรับกรณีการใช้งานของคุณกับสถาปัตยกรรมเป้าหมายของคุณ


ในฐานะที่เป็นpeterSO ความคิดเห็น , Go 1.5ในขณะนี้ (Q3 / Q4 2015) หมายถึง:

ขณะนี้คอมไพเลอร์และรันไทม์ถูกเขียนทั้งหมดใน Go (โดยมีแอสเซมเบลอร์เล็กน้อย)
C ไม่ได้มีส่วนร่วมในการดำเนินงานและเพื่อให้คอมไพเลอร์ C ที่ครั้งหนึ่งเคยเป็นสิ่งที่จำเป็นสำหรับการสร้างการกระจายหายไป

สไลด์ "Go in Go"กล่าวถึง:

C หายไปแล้ว
หมายเหตุด้านข้าง: gccgo ยังคงแข็งแกร่ง


Berkantถามว่าในความคิดเห็นที่ถ้าgccgoเป็นสิ่งที่gcได้รับจาก bootstrapped

Jörg W Mittagตอบ:

ไม่ปรากฏขึ้นหลังจากgccgogc

gcเดิมเขียนด้วยภาษา C โดยอ้างอิงจากคอมไพเลอร์ C ของ Ken Thompson จากระบบปฏิบัติการ Plan9ซึ่งเป็นตัวต่อจาก Unix ซึ่งออกแบบโดยคนกลุ่มเดียวกัน gcได้รับการปรับโครงสร้างซ้ำเพื่อให้มีการเขียนตัวเองมากขึ้นเรื่อย ๆ ใน Go

gccgoเริ่มต้นโดยIan Lance Taylorแฮ็กเกอร์ GCC ที่ไม่มีส่วนเกี่ยวข้องกับโครงการ Go

โปรดทราบว่าคอมไพเลอร์ Go ที่โฮสต์ด้วยตัวเองตัวแรกนั้นเป็นการนำไปใช้งานแบบปิดที่เป็นกรรมสิทธิ์ทางการค้าสำหรับ Windows ซึ่งดูเหมือนว่าชื่อจะหายไปจากสมองของฉันแบบเดียวกับที่ทำจากอินเทอร์เน็ต พวกเขาอ้างว่ามีคอมไพเลอร์ที่โฮสต์ด้วยตัวเองที่เขียนใน Go โดยกำหนดเป้าหมายไปที่ Windows ในเวลาที่gccgoยังไม่มีอยู่จริงและgcเจ็บปวดอย่างมากในการตั้งค่าบน Windows (โดยทั่วไปคุณต้องตั้งค่าสภาพแวดล้อม Cygwin เต็มรูปแบบแก้ไขซอร์สโค้ดและคอมไพล์จากแหล่งที่มา) บริษัท ดูเหมือนจะพับไปก่อนที่พวกเขาจะจัดการเพื่อทำการตลาดผลิตภัณฑ์

Hector Chuได้เปิดตัวพอร์ต Windows ของ Go ในเดือนพฤศจิกายน 2009
และgo-lang.cat-v.org/os-portsเพจดังกล่าวกล่าวถึงงานเริ่มต้นของJoe / Joseph Poirierด้วย ในหน้านี้ :

มีโอกาสใดที่ใครบางคนในความรู้สามารถขอให้คนใดคนหนึ่ง ( Alex Brainman - Hector Chu - Joseph Poirier) ที่เกี่ยวข้องกับการผลิตพอร์ต Windows สามารถสร้างรายการวิกิที่มีรายละเอียดสภาพแวดล้อมการสร้างของพวกเขาได้หรือไม่?

เพิ่มไปที่ (ในการเขียน Web Apps ใน Go ) !光京(Wei GuangJing)


4
golang.org/doc/go1.3#gccgoและที่สำคัญกว่านั้น gccgo รองรับเฉพาะเวอร์ชัน go v1.2 ดังนั้นหากคุณต้องการอะไรใหม่ ๆ ใน 1.3 / 1.4 (tip) gccgo ก็ไม่สามารถใช้งานได้
OneOfOne

1
@OneOfOne จุดดีฉันได้รวมความคิดเห็นของคุณไว้ในคำตอบเพื่อให้มองเห็นได้มากขึ้น
VonC

1
@twotwotwo พบดี. ฉันได้รวมไว้ในคำตอบเพื่อให้มองเห็นได้มากขึ้น
VonC

3
ฉันอ่านว่า gccgo ใช้ goroutines โดยให้แต่ละ goroutine เป็นเธรดเฉพาะ หากสิ่งนี้ยังคงเป็นจริงนั่นอาจเป็นข้อแตกต่างที่สำคัญสำหรับบางคน
DragonFax

2
@LeoGallucci แนวคิดทั่วไปในคำตอบนี้ย่อมาจาก Go 1.11 ("gccgo: more optimization, more processors.") คุณสามารถดูภาพประกอบเพิ่มเติมล่าสุดในstackoverflow.com/a/46970176/6309
VonC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.