मैं निकट भविष्य में एक कंपाइलर लिखने की योजना नहीं बना रहा हूं; फिर भी, मैं कंपाइलर प्रौद्योगिकियों के साथ काफी दिलचस्पी रखता हूं, और इस सामान को बेहतर कैसे बनाया जा सकता है।
संकलित भाषाओं के साथ शुरू होने पर, अधिकांश कंपाइलरों में दो त्रुटि स्तर होते हैं: चेतावनियां और त्रुटियां, सबसे पहले गैर-घातक सामान जिसे आपको ठीक करना चाहिए, और अधिकांश समय यह इंगित करने में त्रुटियां हैं कि मशीन का उत्पादन करना असंभव है- (या बाइट-) इनपुट से कोड।
हालांकि, यह एक बहुत कमजोर परिभाषा है। जावा जैसी कुछ भाषाओं में, @SuppressWarning
निर्देश का उपयोग किए बिना कुछ चेतावनियों से छुटकारा पाना असंभव है । इसके अलावा, जावा कुछ गैर-घातक समस्याओं को त्रुटियों के रूप में मानता है (उदाहरण के लिए, जावा में अनुपलब्ध कोड एक कारण के लिए एक त्रुटि चलाता है जिसे मैं जानना चाहता हूं)।
C # में समान समस्याएं नहीं हैं, लेकिन इसमें कुछ हैं। ऐसा लगता है कि संकलन कई पासों में होता है, और एक पास फेलिंग आगे के पासों को निष्पादित करने से दूर रखेगा। उस वजह से, जब आपका निर्माण विफल हो जाता है तो त्रुटि गणना आपको अक्सर कम करके आंका जाता है। एक रन पर यह कह सकता है कि आपके पास दो त्रुटियां हैं, लेकिन एक बार जब आप उन्हें ठीक करते हैं तो शायद आपको 26 नए मिलेंगे।
सी और सी ++ के लिए खुदाई बस जावा और सी # संकलन निदान की कमजोरियों पर एक बुरा संयोजन दिखाती है (हालांकि यह कहना अधिक सटीक होगा कि जावा और सी # बस आधी समस्याओं के साथ अपने तरीके से चले गए)। कुछ चेतावनियों में वास्तव में त्रुटियां होनी चाहिए (उदाहरण के लिए जब सभी कोड पथ एक मान नहीं लौटाते हैं) और फिर भी वे चेतावनी दे रहे हैं क्योंकि, मुझे लगता है कि जिस समय उन्होंने मानक, संकलक तकनीक लिखी थी वह इस तरह का बनाने के लिए पर्याप्त नहीं था जाँच अनिवार्य है। एक ही नस में, कंपाइलर अक्सर मानक से अधिक के लिए जांच करते हैं, लेकिन फिर भी अतिरिक्त निष्कर्षों के लिए "मानक" चेतावनी त्रुटि स्तर का उपयोग करते हैं। और अक्सर, कंपाइलर उन सभी त्रुटियों की रिपोर्ट नहीं करेंगे, जो उन्हें तुरंत मिल सकती हैं; उन सभी से छुटकारा पाने के लिए कुछ संकलन करना पड़ सकता है। थूक की तरह Cryptic त्रुटियाँ C ++ कंपाइलर का उल्लेख नहीं करना,
अब यह कहते हुए कि कई बिल्ड सिस्टम विफलताओं की रिपोर्ट करने के लिए कॉन्फ़िगर करने योग्य हैं जब कंपाइलर्स चेतावनी का उत्सर्जन करते हैं, तो हमें बस एक अजीब मिश्रण मिलता है: सभी त्रुटियां घातक नहीं हैं, लेकिन कुछ चेतावनी होनी चाहिए; सभी चेतावनियों के हकदार नहीं हैं, लेकिन कुछ उनके अस्तित्व का उल्लेख किए बिना स्पष्ट रूप से दबाए जाते हैं; और कभी-कभी सभी चेतावनी त्रुटियां बन जाती हैं।
गैर-संकलित भाषाओं में अभी भी गंदे त्रुटि रिपोर्टिंग के अपने हिस्से हैं। पायथन में टाइपो को तब तक रिपोर्ट नहीं किया जाएगा जब तक कि कोड वास्तव में नहीं चलता है, और आप वास्तव में एक समय में एक से अधिक त्रुटि को कभी भी किक नहीं कर सकते क्योंकि स्क्रिप्ट एक से मिलने के बाद निष्पादित करना बंद कर देगी।
PHP, इसके किनारे पर, कम या ज्यादा महत्वपूर्ण त्रुटि स्तरों, और अपवादों का एक गुच्छा है। पार्स त्रुटियों को एक बार में सूचित किया जाता है, चेतावनी अक्सर इतनी खराब होती है कि उन्हें आपकी स्क्रिप्ट को रद्द करना चाहिए (लेकिन डिफ़ॉल्ट रूप से नहीं), नोटिस वास्तव में अक्सर गंभीर तर्क समस्याएं दिखाते हैं, कुछ त्रुटियां वास्तव में आपकी स्क्रिप्ट को रोकने के लिए बहुत खराब नहीं हैं लेकिन फिर भी क्या, और हमेशा की तरह PHP के साथ, वहाँ वास्तव में कुछ अजीब चीजें हैं (क्यों नरक हमें घातक त्रुटियों के लिए एक त्रुटि स्तर की आवश्यकता है जो वास्तव में घातक नहीं हैं? E_RECOVERABLE_E_ERROR
मैं आपसे बात कर रहा हूं)।
यह मुझे लगता है कि संकलक त्रुटि रिपोर्टिंग के हर एक कार्यान्वयन मैं सोच सकता हूं कि टूट गया है। जो एक वास्तविक शर्म की बात है, क्योंकि सभी अच्छे प्रोग्रामर इस बात पर जोर देते हैं कि त्रुटियों से सही तरीके से निपटना कितना महत्वपूर्ण है और फिर भी ऐसा करने के लिए अपने स्वयं के उपकरण नहीं मिल सकते हैं।
आपको क्या लगता है कि कंपाइलर त्रुटियों की रिपोर्ट करने का सही तरीका होना चाहिए?