'Gc' और 'gccgo' के बीच प्राथमिक अंतर क्या हैं?


85

दो लोकप्रिय गो संकलक, 'gc' और 'gccgo' के बीच प्राथमिक अंतर क्या हैं? प्रदर्शन का निर्माण? रन-टाइम प्रदर्शन? कमांड लाइन विकल्प? लाइसेंसिंग?

मैं उन मतों की तलाश नहीं कर रहा हूं, जो उनके अंतरों का एक मूल अवलोकन है, इसलिए मैं यह तय कर सकता हूं कि कौन मेरी जरूरतों के लिए सबसे अच्छा है।


3
समय के साथ यह कैसे बदल गया है? अब 2019 में
लियो गैलुकि

जवाबों:


108

आप " सेटिंग और gccgo का उपयोग कर " में अधिक देख सकते हैं :

गोकोगो, गो भाषा के लिए एक संकलक। Gccgo संकलक GCC के लिए एक नया दृश्यपटल है।
ध्यान दें कि gccgo gc संकलक नहीं है

जैसा कि " Gccgo in GCC 4.7.1 " में समझाया गया है (जुलाई 2012)

गो भाषा को हमेशा एक युक्ति द्वारा परिभाषित किया गया है, न कि कार्यान्वयन। गो टीम ने दो अलग-अलग संकलक लिखे हैं जो उस कल्पना को लागू करते हैं: gc और gccgo।

  • जीसी मूल संकलक है, और गो टूल डिफ़ॉल्ट रूप से इसका उपयोग करता है।
  • Gccgo एक अलग फोकस के साथ एक अलग कार्यान्वयन है

जीसी की तुलना में, gccgo कोड संकलित करने के लिए धीमा है, लेकिन अधिक शक्तिशाली अनुकूलन का समर्थन करता है, इसलिए gccgo द्वारा निर्मित सीपीयू-बाउंड प्रोग्राम आमतौर पर तेजी से चलेगा।

इसके अलावा:

  • जीसी कंपाइलर केवल सबसे लोकप्रिय प्रोसेसर का समर्थन करता है: x86 (32-बिट और 64-बिट) और एआरएम।
  • Gccgo, हालांकि, सभी प्रोसेसर का समर्थन करता है जो GCC का समर्थन करता है।
    उन सभी प्रोसेसरों को पूरी तरह से gccgo के लिए परीक्षण नहीं किया गया है, लेकिन कई में x86 (32-बिट और 64-बिट), SPARC, MIPS, PowerPC और यहां तक ​​कि अल्फा भी शामिल है।
    Gccgo को ऑपरेटिंग सिस्टम पर भी परीक्षण किया गया है कि gc संकलक समर्थन नहीं करता है, विशेष रूप से Solaris।

यदि आप कोई मानक जाओ रिहाई से यात्रा के दौरान आदेश स्थापित करते हैं, यह पहले से ही समर्थन करता है के माध्यम से gccgo -compilerविकल्प: go build -compiler gccgo myprog


संक्षेप में: gccgo: अधिक अनुकूलन, अधिक प्रोसेसर


हालाँकि, OneOfOne ( स्रोत ) द्वारा टिप्पणी के रूप में , अक्सर गोकोगो द्वारा समर्थित गो के बीच एक वंशानुक्रम होता है, और नवीनतम विमोचन होता है:

gccgo केवल वर्जन v1.2 तक का समर्थन करता है , इसलिए यदि आपको 1.3 / 1.4 (टिप) gccgo कैंट में कुछ भी नया प्रयोग करने की आवश्यकता है। -

GCC रिलीज़ 4.9 में गोको का गो 1.2 (1.3 नहीं) संस्करण होगा
जीसीसी और गो परियोजनाओं के लिए रिलीज़ शेड्यूल संयोग नहीं करता है, जिसका मतलब है कि 1.3 विकास शाखा में उपलब्ध होगा लेकिन अगले जीसीसी रिलीज़, 4.10, में संभवतः गोकोगो का गो 1.4 संस्करण होगा।


ब्रैड फिट्ज़पैट्रिक की प्रस्तुति की स्लाइड में ट्वोटवोट्वो का उल्लेख है

gccgo बहुत अच्छा कोड उत्पन्न करता है
... लेकिन भागने के विश्लेषण का अभाव है: कई छोटे allocs + कचरा के साथ प्रदर्शन को मारता है
... GC सटीक नहीं है। 32-बिट के लिए बुरा।

twotwotwo कहते हैं:

एक अन्य स्लाइड में उल्लेख किया गया है कि गैर-जीसीओ एआरएम कोड पीढ़ी विस्की है।
यह मानते हुए कि यह आपकी परियोजना के लिए एक दिलचस्प विकल्प है, संभवतः अपने लक्ष्य वास्तुकला पर अपने उपयोग के मामले के लिए बायनेरिज़ की तुलना करें।


के रूप में peterSO टिप्पणियां , जाओ 1.5 अब (Q3 / Q4 2015) का अर्थ है:

कंपाइलर और रनटाइम अब पूरी तरह से गो (थोड़ा असेंबलर के साथ) में लिखे गए हैं।
सी अब कार्यान्वयन में शामिल नहीं है, और इसलिए सी कंपाइलर जो एक बार वितरण के निर्माण के लिए आवश्यक था वह चला गया है

"गो इन गो" स्लाइड का उल्लेख करें:

C चला गया है।
साइड नोट: gccgo अभी भी मजबूत हो रहा है।


Berkant पूछता टिप्पणी में अगर gccgoहै क्या gcसे बूटस्ट्रैप किया गया था।

Jörg W Mittag उत्तर:

नहीं, gccgoबाद में दिखाई दिया gc

gcमूल रूप से सी में लिखा गया था। यह केन थॉम्पसन के सी कंपाइलर पर आधारित है , जो प्लैंक 9 ऑपरेटिंग सिस्टम , यूनिक्स का उत्तराधिकारी है, जिसे उसी लोगों द्वारा डिजाइन किया गया है। gcगो में लिखे गए अपने आप को अधिक से अधिक करने के लिए पुनरावृत्त किया गया था।

gccgoइयान लांस टेलर द्वारा शुरू किया गया था , एक जीसीसी हैकर जो गो परियोजना से संबद्ध नहीं था।

ध्यान दें कि पहले पूरी तरह से स्व-होस्टेड गो संकलक वास्तव में विंडोज के लिए एक मालिकाना वाणिज्यिक बंद-स्रोत कार्यान्वयन था, जिसका नाम मेरे मस्तिष्क से गायब हो गया लगता है ठीक उसी तरह जैसे कि यह इंटरनेट से किया था। उन्होंने गो में लिखा एक सेल्फ-होस्टेड कंपाइलर होने का दावा किया, ऐसे समय में विंडोज को लक्षित करना जहां gccgoअभी तक मौजूद नहीं था और gcविंडोज के लिए सेट करने के लिए बेहद दर्दनाक था। (आपको मूल रूप से एक पूर्ण साइग्विन वातावरण स्थापित करना था, स्रोत कोड को पैच करना और स्रोत से संकलित करना।) कंपनी को लगता है कि हालांकि, इससे पहले कि वे कभी उत्पाद का विपणन करने में कामयाब रहे।

हेक्टर चू ने 2009 के नवंबर में गो का एक विंडोज पोर्ट जारी किया था।
और go-lang.cat-v.org/os-portsपेज में जोस / जोसेफ पोइयर के प्रारंभिक काम का भी उल्लेख किया गया है। में यह पेज :

किसी भी मौका है कि किसी को पता है कि लोगों में से एक ( एलेक्स ब्रेनमैन - हेक्टर चू - जोसेफ Poirier) विंडोज पोर्ट के निर्माण में शामिल एक अनुरोध कर सकते हैं एक विकी प्रविष्टि उनके निर्माण पर्यावरण का ब्यौरा बना सकता है?

इसमें जोड़ें ( गो में वेब ऐप्स लिखने में ) ! 京Writing (वीए गुआंगजिंग)


4
golang.org/doc/go1.3#gccgo और अधिक महत्वपूर्ण बात यह है कि gccgo केवल संस्करण गो v1.2 तक का समर्थन करता है, इसलिए यदि आपको 1.3 / 1.4 (टिप) gccgo केंट में कुछ भी नया उपयोग करने की आवश्यकता है।
वनऑफने

1
@OneOfOne अच्छा बिंदु है, मैंने आपकी टिप्पणी को अधिक दृश्यता के लिए उत्तर में शामिल किया है।
वॉन सी सी

1
@twotwotwo अच्छा लगता है। मैंने इसे अधिक दृश्यता के लिए उत्तर में शामिल किया है।
VonC

3
मैंने पढ़ा है कि gccgo प्रत्येक goroutine को एक समर्पित धागा देकर goroutines लागू करता है (एक धागे पर कई goroutines को गुणा करने का विरोध)। अगर यह अभी भी सच है तो यह कुछ लोगों के लिए एक बड़ा अंतर हो सकता है।
ड्रैगनफैक्स

2
@LeoGallucci इस उत्तर में सामान्य विचार गो 1.11 के साथ खड़ा है ("gccgo: अधिक अनुकूलन, अधिक प्रोसेसर।")। आप stackoverflow.com/a/46970176/6309 में अधिक हालिया चित्र देख सकते हैं ।
वॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.