सभी महान जवाब के अलावा अब तक:
आपके पास एक "पर्यवेक्षक पूर्वाग्रह" है। आप बग का निरीक्षण नहीं करते हैं, और इसलिए आप मानते हैं कि कोई भी नहीं है।
मैं जैसा सोचता था, वैसा ही आप करते थे। फिर मैंने पेशेवर रूप से कम्पाइलर लिखना शुरू किया, और मैं आपको बता दूं, कि वहां बहुत सारे कीड़े हैं!
आपको बग नहीं दिखते क्योंकि आप कोड लिखते हैं जो बाकी सभी कोड के 99.999% की तरह है जो लोग लिखते हैं। आप शायद पूरी तरह से सामान्य, सरल, स्पष्ट रूप से सही कोड लिखते हैं जो विधियों को कॉल करता है और लूप चलाता है और कुछ भी फैंसी या अजीब नहीं करता है, क्योंकि आप सामान्य डेवलपर हैं जो सामान्य व्यावसायिक समस्याओं को हल कर रहे हैं।
आपको कोई कंपाइलर बग दिखाई नहीं देता क्योंकि कंपाइलर बग्स सीधे-सरल सामान्य कोड परिदृश्यों का विश्लेषण करने में सक्षम नहीं होते हैं; बग अजीब कोड के विश्लेषण में हैं जो आप नहीं लिखते हैं।
मैं दूसरी तरफ विपरीत पर्यवेक्षक पूर्वाग्रह है। मैं हर दिन पूरे दिन पागल कोड देखता हूं, और इसलिए मुझे कंपाइलर कीड़े से भरा हुआ लगता है।
यदि आप किसी भी भाषा के भाषा विनिर्देश के साथ बैठते हैं, और उस भाषा के लिए कोई संकलक कार्यान्वयन लेते हैं, और वास्तव में यह निर्धारित करने के लिए कठिन प्रयास करते हैं कि संकलक ने वास्तव में कल्पना को लागू किया है या नहीं, अस्पष्ट कोने के मामलों पर ध्यान केंद्रित कर रहा है, तो बहुत जल्द ही आपको मिल जाएगा। संकलक कीड़े अक्सर। मैं आपको एक उदाहरण देता हूं, यहां एक C # कंपाइलर बग है जो मुझे पांच मिनट पहले मिला था।
static void N(ref int x){}
...
N(ref 123);
कंपाइलर तीन त्रुटियां देता है।
- एक रेफरी या आउट तर्क एक परिवर्तनीय चर होना चाहिए।
- N (Ref int x) के लिए सर्वश्रेष्ठ मिलान में अमान्य तर्क हैं।
- तर्क 1 पर "रेफ" गुम।
स्पष्ट रूप से पहली त्रुटि संदेश सही है और तीसरा एक बग है। त्रुटि पीढ़ी एल्गोरिदम यह पता लगाने की कोशिश कर रहा है कि पहला तर्क अमान्य क्यों था, वह इसे देखता है, देखता है कि यह एक स्थिर है, और स्रोत कोड पर वापस नहीं जाता है यह जांचने के लिए कि क्या इसे "रेफ" के रूप में चिह्नित किया गया था; इसके बजाय, यह मानता है कि कोई भी रेफ के रूप में एक निरंतर को चिह्नित करने के लिए पर्याप्त मूर्ख नहीं होगा, और यह तय करता है कि रेफ गायब होना चाहिए।
यह स्पष्ट नहीं है कि सही तीसरा त्रुटि संदेश क्या है, लेकिन यह नहीं है। वास्तव में, यह स्पष्ट नहीं है कि दूसरी त्रुटि संदेश सही है या नहीं। क्या ओवरलोड रिज़ॉल्यूशन विफल हो जाना चाहिए, या "रेफरी 123" को सही प्रकार के रेफरी तर्क के रूप में माना जाना चाहिए? मुझे अब इसे कुछ विचार देना होगा और इसे ट्राइएज टीम के साथ बात करनी होगी ताकि हम यह निर्धारित कर सकें कि सही व्यवहार क्या है।
आपने इस बग को कभी नहीं देखा है क्योंकि आप शायद कभी इतना मूर्खतापूर्ण काम नहीं करेंगे जितना कि रेफरी द्वारा 123 पास करने की कोशिश करना। और अगर आपने किया है, तो आप शायद यह भी ध्यान नहीं देंगे कि तीसरी त्रुटि संदेश निरर्थक है, क्योंकि समस्या का निदान करने के लिए पहला सही और पर्याप्त है। लेकिन मैं इस तरह सामान बनाने की कोशिश करता हूं, क्योंकि मैं कंपाइलर को तोड़ने की कोशिश कर रहा हूं । यदि आपने कोशिश की, तो आपको कीड़े भी दिखाई देंगे।