स्टीव येजे ने एक महान ब्लॉग पोस्ट लिखा है, जो कुछ हद तक अप्रत्यक्ष रूप से इसे संबोधित करता है।
बड़ा बिंदु # 1: कंपाइलर्स कंप्यूटर विज्ञान के हर पहलू को शामिल करते हैं। वे एक ऊपरी-स्तरीय पाठ्यक्रम हैं क्योंकि आपको कंप्यूटर विज्ञान के पाठ्यक्रम में सीखी गई अन्य सभी चीजों को जानने की जरूरत है। डेटा संरचनाएं, खोज और सॉर्टिंग, स्पर्शोन्मुख प्रदर्शन, ग्राफ़ रंग? यह सब वहाँ है।
एक कारण है कि नुथ अपने स्मारकीय (और कभी न खत्म होने वाले) "आर्ट ऑफ कंप्यूटर प्रोग्रामिंग" पर कई दशकों से काम कर रहा है, भले ही यह एक कंपाइलर टेक्स्टबुक के रूप में शुरू हुआ। उसी तरह जिस पर कार्ल सागन ने कहा था "यदि आप स्क्रैच से सेब पाई बनाना चाहते हैं, तो आपको पहले ब्रह्मांड का आविष्कार करना चाहिए", यदि आप एक कंपाइलर लिखना चाहते हैं, तो आपको पहले कंप्यूटर विज्ञान के लगभग हर पहलू से निपटना होगा।
इसका मतलब है कि यदि कंपाइलर स्व-होस्ट किया गया है, तो यह सुनिश्चित करने में सक्षम होना चाहिए कि मुझे क्या चाहिए, कोई फर्क नहीं पड़ता कि मैं क्या कर रहा हूं। इसके विपरीत, यदि आप अपनी भाषा में एक कंपाइलर नहीं लिखते हैं, तो एक अच्छा मौका है कि यह कुछ ऐसा याद करता है जो वास्तव में किसी के लिए महत्वपूर्ण है, क्योंकि भाषा के कार्यान्वयनकर्ताओं को कभी भी ऐसा प्रोग्राम नहीं लिखना पड़ता है जिससे उन्हें उन सभी मुद्दों के बारे में सोचना पड़े।
बिग पॉइंट # 2: 30,000 फीट से, समस्याओं की एक आश्चर्यजनक संख्या संकलक की तरह दिखती है।
कंपाइलर प्रतीकों की एक धारा लेते हैं, कुछ डोमेन-विशिष्ट पूर्वनिर्धारित नियमों के अनुसार उनकी संरचना का पता लगाते हैं, और उन्हें दूसरे प्रतीक स्ट्रीम में बदल देते हैं। बहुत सामान्य लगता है, है ना? अच्छी तरह से हाँ।
चाहे आप विजुअल C ++ टीम में हों या नहीं, आप अक्सर खुद को कुछ ऐसा करने की जरूरत पाएंगे, जो किसी कंपाइलर के हिस्से की तरह दिखता हो। मैं इसे हर दिन शाब्दिक रूप से करता हूं।
अधिकांश अन्य व्यवसायों के विपरीत, प्रोग्रामर न केवल टूल का उपयोग करते हैं, बल्कि अपने स्वयं के टूल भी बनाते हैं। एक प्रोग्रामर जो (कौशल की कमी के कारण, या प्रयोग करने योग्य उपकरणों की कमी जिसके साथ अन्य उपकरण बनाने के लिए) लिख सकता है उपकरण हमेशा के लिए विकलांग हो जाएगा, उन उपकरणों तक सीमित होगा जो किसी और को प्रदान करता है।
यदि एक भाषा "प्रोग्राम बनाने के लिए अच्छी तरह से अनुकूल नहीं है" जो कि प्रतीकों की एक धारा ले सकती है, उनके लिए नियम लागू कर सकती है और इसे प्रतीकों की एक और धारा में बदल सकती है, जो कि एक बहुत ही सीमित भाषा की तरह लगती है, और ऐसा नहीं है जो उपयोगी हो। मेरे लिए।
(सौभाग्य से, मुझे नहीं लगता कि कई प्रोग्रामिंग भाषाएं हैं जो प्रतीकों को बदलने के लिए बीमार हैं। सी शायद आज उपयोग की जाने वाली सबसे खराब भाषा में से एक है, फिर भी सी कंपाइलर्स आमतौर पर स्व-होस्ट किए जाते हैं, ताकि कभी किसी को रोका न जाए।)
एक तीसरा कारण, मैं व्यक्तिगत अनुभव से समाप्त होऊंगा, जिसका उल्लेख येजे द्वारा नहीं किया गया है (क्योंकि वह "क्यों स्व-मेजबान" के बारे में नहीं लिख रहा था): यह बग को हिलाता है। जब आप एक कंपाइलर लिख रहे हैं, तो इसका मतलब है कि हर बार जब आप इसे बनाते हैं (न कि हर बार जब आप इसे चलाते हैं), तो आप इसे काम करने के लिए निर्भर करते हैं, और एक सभ्य आकार के कोडबेस (कंपाइलर खुद) के खिलाफ सही ढंग से काम करने के लिए।
इस महीने मैं एक अपेक्षाकृत नए और प्रसिद्ध गैर-स्व-होस्ट किए गए कंपाइलर का उपयोग कर रहा हूं (आप शायद अनुमान लगा सकते हैं कि कौन सा है), और मैं चीज को जब्त किए बिना 2 दिन नहीं जा सकता। मुझे आश्चर्य है कि वास्तव में डिजाइनरों को इसका कितना उपयोग करना पड़ा।