क्या Gcc C संकलक C में ही लिखा गया है?


87

क्या Gcc C संकलक C में ही लिखा गया है? या यह विधानसभा में लिखा है? यदि कंपाइलर C में लिखा जाता है, तो कंपाइलर कोड संकलित करने के लिए किस कंपाइलर का उपयोग करता है?


12
हाँ यह (ज्यादातर) है। बेशक, किसी को सी को संकलित करने के लिए सी कंपाइलर की आवश्यकता होती है, क्योंकि अधिकांश कंपाइलरों के साथ, "बूट-स्ट्रैप" चरणों की एक श्रृंखला होती है। सामान्य विचार स्थापित करने वाले GCC: GCC - LFS के निर्माण और स्थापना में शामिल है

2
1980 के दशक और 90 के दशक में अलग-अलग ब्रांड के वर्कस्टेशनों में सी कंपाइलर, टूल्स आदि के साथ अपने स्वयं के यूनिक्स जैसे वातावरण थे ... जो सभी एक दूसरे से थोड़े अलग थे। जीसीसी स्रोत के साथ आप इन प्लेटफार्मों में से एक पर जीसीसी का एक प्रारंभिक संकलन कर सकते हैं, और फिर एक निश्चित बिंदु के लिए अधिक या कम जांच के लिए कुछ ही बार अपने साथ जीसीसी संकलित करें।
पॉल

जवाबों:


98

जीसीसी में विशिष्ट इतिहास जीसीसी विकी पर दिया गया है । अधिक सामान्य बिंदु यह है कि संकलक आमतौर पर मूल रूप से कुछ अन्य संकलक के साथ संकलित किए जाते हैं जब तक कि वे खुद को संकलित करने के लिए पर्याप्त शक्तिशाली न हों। वैकल्पिक रूप से, एक मूल संकलक लिखना संभव है जो कोडांतरक में आपकी सुविधाओं के सबसेट को संभाल सकता है, और वहां से निर्माण कर सकता है। लेकिन फिर, यह अब लगभग कभी भी ज़रूरत नहीं है। विभिन्न भाषाओं में बहुत सारे संकलन उपलब्ध हैं। यहां तक ​​कि जब स्टीफन जॉनसन पीसीसी (पहले सी कंपाइलरों में से एक) लिख रहे थे, तो कई अन्य भाषाओं के साथ-साथ बी के लिए भी कंपाइलर उपलब्ध थे। gcc के पास मूल रूप से इसे बनाने के लिए चुनने के लिए कई संकलक थे, और RMS का कहना है कि वह अपने प्रारंभिक विकास के दौरान कम से कम पेस्टल संकलक का उपयोग कर रहा था।

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

इस सवाल में संकलक के बूटस्ट्रैपिंग के पहले उदाहरण से संबंधित कुछ दिलचस्प सूक्ष्मताएं हैं। यदि आप बहुत चालाक थे, तो आप कुछ अविश्वसनीय, शानदार और भयानक करने के लिए उस बूटस्ट्रैप का उपयोग कर सकते हैं ।


वाह, आप जिस दूसरे लेख से जुड़े हैं, वह पूरी तरह से चतुर है।
पोंकाडूडल

1
महान बूटस्ट्रैपिंग लिंक के लिए धन्यवाद। मैंने यह मान लिया था कि कंपाइलर हमेशा सरल भाषा में इस तरह से छांटने के लिए मशीन कोड पर वापस लिखे जाते हैं । (उदाहरण के लिए, क्या होगा अगर आपको पता चले कि आपके कंपाइलर के लिए बाइनरी में कोई गलती है? यह निश्चित रूप से बहुत मजबूत उदाहरण प्रदान करता है।) तो कंपाइलर को अपनी भाषा में लिखने के क्या फायदे हैं? क्या बेहद पागल लोग इस बारे में चिंता करते हैं और "आत्म" बूटस्ट्रैपिंग के बिना अपने संकलक का निर्माण करते हैं?
RoG

4
कुछ भाषा समूह इसे सम्मान की निशानी मानते हैं जो खुद को संकलित करने में सक्षम है। गो ने हाल ही में इस दिशा में एक बड़ा धक्का दिया। दूसरी ओर, स्विफ्ट, विशेष रूप से स्विफ्ट में अपने संकलक को फिर से लिखने की कोई वर्तमान योजना नहीं है। हालांकि, ध्यान दें कि GCC को हमेशा C. में लिखा गया था। यह सिर्फ अन्य संकलक के साथ संकलित किया गया था। लेकिन अगर सभी C कंपाइलर्स BCPL में लिखे गए हैं, तो यह व्यामोह के संबंध में कुछ भी तय नहीं करेगा। यह सिर्फ एक कदम पीछे मुद्दे को ले जाता है। (जीसीसी डब्ल्यू / क्लैंग को संकलित करने से आपको समान व्यामोह के लाभ मिलेंगे।)
रोब नेपियर

ध्यान दें कि gcc की एक नीति है कि gcc प्रमुख संस्करण X को हमेशा gcc प्रमुख संस्करण X-1 के साथ संकलित किया जा सकता है, इसलिए X में संकलक में जोड़ी गई कोई भी नई सुविधाएँ केवल gcc स्रोत में X + 1 से ही उपयोग की जा सकती हैं। उदाहरण के लिए, आपको किसी भी gcc संस्करण 9 को संकलित करने में सक्षम होना चाहिए, चाहे कोई भी मामूली संस्करण संख्या हो, किसी भी gcc 8 के साथ, फिर से कोई फर्क नहीं पड़ता कि मामूली संस्करण क्या है।
बारूच

51

मूल रूप से इसे कुछ असेंबली भाषा में लिखा गया था, फिर इसे कुत्ते के भोजन के लिए शुरू किया गया।


2
मैंने मूल बूटस्ट्रैप के लिए कोडांतरक का उपयोग करके RMS के लिए कोई संदर्भ नहीं देखा है। उसके लिए आपका स्रोत क्या है? उनके पास बूटस्ट्रैप के साथ कई अन्य संकलक थे, जिससे यह बहुत काम लगता है।
रोब नेपियर

17
हालांकि मेरा कार्यकाल बूटस्ट्रैप का था।
मार्टिन यॉर्क

7
हाहाहा मैंने इसे कुछ हफ़्ते पहले पढ़ा था और सोचा था कि आप उस अभिव्यक्ति के साथ दिमाग से बाहर थे, यह नहीं पता था कि यह मानक था। अच्छा शो सर! en.wikipedia.org/wiki/Eating_your_own_dog_food

3

हालांकि यह स्पष्ट रूप से सिर्फ एक बहुत ही किसी न किसी सूचक है, मैं इस त्वरित पाया लिस्टिंग पर gcc-5.1.0-src/gcc/निर्देशिका दिलचस्प। इस निर्देशिका में स्वयं जीसीसी के मुख्य स्रोत हैं (रनटाइम लाइब्रेरी को छोड़कर)।

यहाँ C और C ++ फ़ाइलों के वर्चस्व वाले विस्तार के आधार पर शीर्ष फ़ाइल-काउंट्स (100 से अधिक) हैं ।

    112 .opt
    118 .def
    140 .cc
    185 .x
    250 .exp
    353 .md
    366 .mm
    414 .f
    430 .f03
    521 .m
    625 .a
   1082 .go
   1371 .h
   1602 .ads
   1655 .adb
   1828 .ada
   3860 .f90
  11231 .C        // C++ 
  23811 .c        // C 

कृपया ध्यान दें कि आजकल GCCग्नू कंपाइलर संग्रह को संदर्भित करता है, न कि केवल ग्नू सी कंपाइलर को।

6.3 gcc Subdirectory

जीसीसी निर्देशिका में कई फाइलें शामिल हैं जो जीसीसी के सी स्रोतों का हिस्सा हैं, कॉन्फ़िगरेशन और निर्माण प्रक्रिया के हिस्से के रूप में उपयोग की जाने वाली अन्य फाइलें और प्रलेखन और एक परीक्षण सहित उपनिर्देशिकाएं।

संदर्भ: https://gcc.gnu.org/oniltocs/gccint/gcc-Directory.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.