GCC C ++ में लिखे जाने के बाद से क्या चिकन और अंडे का मुद्दा नहीं है?


10

4.8 रिलीज़ के बाद से, C ++ कंपाइलर GCC (इसका G ++ भाग) C में नहीं, बल्कि C ++ में ही लिखा गया है। इस पर मेरा एक काल्पनिक सवाल है।

मुझे आश्चर्य है कि कैसे है कि कोई C ++ कम्पाइलर अभी तक एक नए मंच पर जीसीसी के सी ++ कोड संकलित करने के लिए। बेशक, आप अन्य मशीनों पर संकलित पहले से बनाए गए बाइनरी इस्तेमाल कर सकते हैं। या आप GCC के पुराने संस्करण का उपयोग कर सकते हैं जो C में लिखा गया था और इसके साथ वर्तमान संस्करण को संकलित करें।

हालांकि, बिना बायनेरी और सिर्फ नवीनतम संस्करण के, आप फंस गए, है ना? यदि नहीं, तो जीसीसी परियोजना के C से C ++ तक स्विच द्वारा उठाए गए इस स्थिति पर अन्य निहितार्थ हैं?


3
मुझे यकीन नहीं है कि आप यहां क्या पूछ रहे हैं, हालांकि आप क्रॉस संकलन के बारे में पढ़ने की इच्छा कर सकते हैं ।

5
संपूर्ण रूप से नए प्लेटफ़ॉर्म में C ++ कंपाइलर और C कंपाइलर नहीं होंगे। क्रॉस संकलन इसका उत्तर है।
doc

1
आप शायद पढ़ना चाहिए सेल्सियस के लिए जीसीसी के इस कदम ++ , सी ++ स्थानांतरण करने के लिए और संभवतः चर्चा जीसीसी अब सी ++ का निर्माण करने की आवश्यकता होगी reddit पर। मुझे यकीन नहीं है कि gcc4.8 से पहले एक संकलित ऑपरेटिंग सिस्टम के साथ पैक किए गए सी कंपाइलर के साथ बनाया जा सकता था (और यह आपको कई पर C89 तक सीमित कर देगा)।

2
मुझे नहीं लगता कि इस प्रश्न के लिए C ++ के बारे में क्या खास है, समस्या C या किसी अन्य भाषा के साथ मौजूद है, है ना?
रेमकोगर्लिच

जवाबों:


16

यह वास्तव में एक प्रसिद्ध अवधारणा है जिसे बूटस्ट्रैपिंग कहा जाता है । मूल रूप से, कहीं न कहीं, जीसीसी के एक संस्करण के निर्माण के लिए एक न्यूनतम सी कोडबेस मौजूद है, जो वर्तमान जीसीसी कोडबेस का निर्माण करने में सक्षम है। स्व-होस्टिंग भाषाएं दशकों से ऐसी चीजें कर रही हैं।


दरअसल नहीं। अब ऐसा नहीं है (और सवाल के साथ मुद्दा)। gccअब एसी केवल संकलक द्वारा निर्मित नहीं किया जा सकता है। Gcc के साथ एकमात्र गारंटी यह है कि वे बनाते हैं कि gcc संस्करण N को gcc संस्करण N-1 के साथ बनाया जा सकता है।

9
@MichaelT: लेकिन GCC का एक पुराना संस्करण C कंपाइलर के साथ बनाया जा सकता है, जो बाद में C ++ में लिखे गए बाद के संस्करणों को संकलित कर सकता है, जो कि मैंने कहा था।
मेसन व्हीलर

मैं इस प्रश्न में दिए गए प्रश्नों की ओर भी इशारा करता हूँ: However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?- यह बताता है कि आपके पास पिछले संस्करणों तक पहुँच नहीं है और न ही यह कोडबेस के लिए C से C ++ में स्विच के अन्य निहितार्थों को संबोधित करता है।

9

कंपाइलर बनाना जो उसी भाषा में लिखा जाता है जिसे वह कंपाइल करता है बूटस्ट्रैपिंग कहलाता है । विकिपीडिया लेख कई तरीकों का वर्णन करता है जिन्हें संकलक बूटस्ट्रैप किया जा सकता है।

आपके प्रतिबंध को देखते हुए कि आपके पास केवल 4.8-पोस्ट G ++ स्रोत कोड है और आपके लक्षित प्लेटफ़ॉर्म (कोई मौजूदा C ++ कंपाइलर) के लिए कोई पूर्व-निर्मित बायनेरिज़ नहीं है, तो G ++ कंपाइलर को बूटस्ट्रैप करना क्रॉस-संकलन के माध्यम से किया जा सकता है ।

क्रॉस-संकलन का उपयोग करके एक कंपाइलर को बूटस्ट्रैप करते समय, आप अपने कंपाइलर के कई संस्करण बनाते हैं

  1. अपने पीसी पर, आप C ++ कंपाइलर स्थापित करते हैं (कोई C ++ कंपाइलर हो सकता है, G ++ नहीं होना चाहिए)
  2. उस कंपाइलर का उपयोग करके, आप एक G ++ क्रॉस-कंपाइलर बनाते हैं जो पीसी पर निष्पादित हो सकता है और लक्ष्य प्लेटफ़ॉर्म के लिए कोड उत्पन्न करता है
  3. आपके द्वारा अभी बनाए गए G ++ क्रॉस-कंपाइलर का उपयोग करके, आप एक देशी G ++ कंपाइलर बनाते हैं जो लक्ष्य प्लेटफ़ॉर्म पर चल सकता है और इसके लिए कोड बना सकता है।
  4. आप कर चुके हैं। आपने नए प्लेटफ़ॉर्म के लिए C ++ कंपाइलर बनाया है।

यदि आपके पास प्रारंभिक चरणों को पूरा करने के लिए एक पीसी (या समान) नहीं है, तो आप वास्तव में फंस गए हैं, लेकिन उस स्थिति में रहने और संकलक को बूटस्ट्रैप करने की कोशिश नगण्य है।

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