आज, आप एक असली सी संकलक की जरूरत है एक होने के लिए अनुकूलन संकलक , विशेष रूप से, क्योंकि सी नहीं रह गया है हार्डवेयर के करीब एक भाषा है, क्योंकि वर्तमान प्रोसेसर अविश्वसनीय रूप से जटिल (हैं बाहर के आदेश , pipelined , superscalar , परिसर के साथ कैश और TLB , इसलिए निर्देश निर्धारण की जरूरत है , आदि ...)। आज के x86 प्रोसेसर पिछली सदी के i386 प्रोसेसर की तरह नहीं हैं, भले ही दोनों एक ही मशीन कोड को चलाने में सक्षम हों। देखें कि सी कोई निम्न स्तरीय भाषा नहीं है (आपका कंप्यूटर डेविड चिसनॉल का तेज़ पीडीपी -11 नहीं है) कागज़ है।
कुछ लोग नॉन-ऑप्टिमाइज़िंग सी कंपाइलर्स जैसे कि छोटेसीवी या एनवीसीके का उपयोग कर रहे हैं , क्योंकि वे कोड का उत्पादन करते हैं जो कि अनुकूलन करने वाले कंपाइलरों की तुलना में कई गुना धीमा होता है।
एक अनुकूलन संकलक कोडिंग मुश्किल है। ध्यान दें कि GCC और Clang दोनों कुछ "स्रोत भाषा-तटस्थ" कोड प्रतिनिधित्व का अनुकूलन कर रहे हैं (GCC के लिए Gimple, Clang के लिए LLVM)। एक अच्छे C कंपाइलर की जटिलता पार्सिंग चरण में नहीं है!
विशेष रूप से, C ++ कंपाइलर बनाने से ज्यादा कठिन नहीं है C कंपाइलर बनाना: C ++ को पार्स करना और इसे कुछ आंतरिक कोड प्रतिनिधित्व में बदलना जटिल है (क्योंकि C ++ विनिर्देश जटिल है), लेकिन अच्छी तरह से समझा जाता है, लेकिन ऑप्टिमाइज़ेशन पार्ट्स और भी हैं जटिल (GCC के अंदर: मध्य-अंत अनुकूलन, स्रोत-भाषा और लक्ष्य-प्रोसेसर तटस्थ, संकलक के अधिकांश का निर्माण करते हैं, शेष कई भाषाओं के लिए फ्रंट-एंड के बीच संतुलित होते हैं और कई प्रोसेसर के लिए बैक-एंड होते हैं )। इसलिए अधिकांश अनुकूलन सी कंपाइलर कुछ अन्य भाषाओं को भी संकलित करने में सक्षम हैं, जैसे सी ++, फोरट्रान, डी ... ... जीसीसी के सी ++ विशिष्ट भाग संकलक के लगभग 20% हैं ...
साथ ही, C (या C ++) का इतना व्यापक रूप से उपयोग किया जाता है कि लोग उम्मीद करते हैं कि उनके कोड के अनुपालन योग्य होने के बावजूद भी यह आधिकारिक मानकों का पालन नहीं करता है, जो भाषा के शब्दार्थों को ठीक से परिभाषित नहीं करते हैं (इसलिए प्रत्येक संकलक की अपनी व्याख्या हो सकती है इसका)। कॉम्पैक में भी देखें सी संकलक साबित हुए, और फ्रामा -सी स्थैतिक विश्लेषक, जो सी के अधिक औपचारिक शब्दार्थों की परवाह करते हैं।
और अनुकूलन एक लंबी पूंछ की घटना है: कुछ सरल अनुकूलन लागू करना आसान है, लेकिन वे एक संकलक को प्रतिस्पर्धी नहीं बनाएंगे! आपको एक वास्तविक दुनिया संकलक को प्रतिस्पर्धी बनाने के लिए, बहुत सारे विभिन्न अनुकूलन लागू करने की आवश्यकता है, और उन्हें चतुराई से व्यवस्थित और संयोजित करने की आवश्यकता है। दूसरे शब्दों में, एक वास्तविक दुनिया का अनुकूलन करने वाला कंपाइलर सॉफ्टवेयर का एक जटिल टुकड़ा होना चाहिए। BTW, GCC और Clang / LLVM दोनों में कई आंतरिक विशिष्ट C / C ++ कोड जनरेटर हैं। और दोनों एक विशाल डेवलपर समुदाय (कुछ सौ व्यक्तियों, जो ज्यादातर पूर्णकालिक काम कर रहे हैं, या कम से कम आधे समय में काम कर रहे हैं) के साथ दोनों विशाल जानवर हैं (प्रत्येक वर्ष कई प्रतिशत की विकास दर के साथ कोड के लाखों स्रोत हैं)।
ध्यान दें कि कोई (मेरे ज्ञान का सबसे अच्छा) मल्टी-थ्रेडेड सी कंपाइलर नहीं है, भले ही एक कंपाइलर के कुछ हिस्सों को समानांतर में चलाया जा सकता है (जैसे इंट्रा-प्रोसीजरल ऑप्टिमाइज़ेशन, रजिस्टर एलोकेशन, इंस्ट्रक्शन शेड्यूलिंग ...)। और समानांतर निर्माण make -j
हमेशा पर्याप्त नहीं होता है (विशेषकर एलटीओ के साथ )।
इसके अलावा, सी कंपाइलर को स्क्रैच से कोड करने पर वित्त पोषित करना मुश्किल है, और इस तरह के प्रयास को कई वर्षों तक चलने की आवश्यकता है। अंत में, आज अधिकांश C या C ++ कंपाइलर मुफ्त सॉफ्टवेयर हैं (स्टार्टअप्स द्वारा बेचे जाने वाले नए स्वामित्व वाले कंपाइलरों के लिए अब कोई बाजार नहीं है) या कम से कम एकाधिकार वाली वस्तुएं हैं (जैसे Microsoft Visual C ++ ), और फ्री सॉफ्टवेयर होना कंपाइलरों के लिए आवश्यक है। क्योंकि उन्हें कई अलग-अलग संगठनों से योगदान की आवश्यकता है)।
मैं नि: शुल्क सॉफ्टवेयर के रूप में खरोंच से एक सी संकलक पर काम करने के लिए धन प्राप्त करने के लिए खुश हूं, लेकिन मुझे विश्वास नहीं है कि आज संभव है!