जेरी ने कहा: ... नतीजा अब काफी सी ++ नहीं है , जबकि मेरा रूपक यह है कि यह स्पष्ट रूप से सी ++ है, बस थोड़ी अलग बोली है क्योंकि कार्यक्रम अन्य रूपों, सम्मेलनों और लिखित शैलियों का उपयोग करते हैं।
उन्हें अक्षम करने के मेरे प्राथमिक कारण यहां दिए गए हैं:
बाइनरी संगतता
भाषा और अनुवाद की सीमाओं को पार करना सार्वभौमिक रूप से अच्छी तरह से परिभाषित या अपरिभाषित नहीं है। यदि आप अपने कार्यक्रम को परिभाषित व्यवहार के क्षेत्र में संचालित करना चाहते हैं, तो आपको मॉड्यूल निकास बिंदुओं पर अपवादों को छोड़ना होगा।
निष्पादन योग्य आकार
यहाँ मेरे द्वारा लिखे गए एक अपवाद मुक्त कार्यक्रम के द्विआधारी आकार हैं, बिना किसी अपवाद के और बिना सक्षम किए गए:
अपवादों के बिना:
- निष्पादन योग्य + निर्भरताएँ: 330
- अंतिम पट्टी निष्पादन योग्य (रिलीज बिल्ड): 37
अपवादों के साथ:
- निष्पादन योग्य + निर्भरताएँ: 380
- अंतिम पट्टी निष्पादन योग्य (रिलीज बिल्ड): 44
अनुस्मारक: यह पुस्तकालयों और कार्यक्रमों का एक संग्रह है जिसमें शून्य थ्रो / कैच शामिल हैं। कंपाइलर ध्वज C ++ मानक लाइब्रेरी में अपवाद सक्षम करता है । इसलिए, वास्तविक दुनिया में लागत इस उदाहरण में देखी गई 19% से अधिक है।
संकलक: सेब gcc4.2 + llvm। एमबी में आकार लेता है।
गति
"शून्य लागत अपवाद" शब्द के बावजूद, वे तब भी कुछ ओवरहेड जोड़ते हैं, जब कभी कुछ भी नहीं फेंकता है। उपरोक्त मामले में, यह एक प्रदर्शन महत्वपूर्ण कार्यक्रम है (सिग्नल प्रोसेसिंग, जनरेशन, प्रस्तुति, रूपांतरण, बड़े डेटा सेट / सिग्नल के साथ)। इस डिजाइन में अपवाद आवश्यक विशेषता नहीं है, जबकि प्रदर्शन बहुत महत्वपूर्ण है।
कार्यक्रम की शुद्धता
एक अजीब कारण की तरह लगता है ... यदि फेंकना एक विकल्प नहीं है, तो आपको अपने कार्यक्रम को सही ढंग से निष्पादित करने की गारंटी देने के लिए अपेक्षाकृत सख्त, सही, अच्छी तरह से परीक्षण किए गए प्रोग्राम लिखना होगा और यह कि ग्राहक इंटरफेस का सही तरीके से उपयोग करते हैं (यदि आप मुझे एक बुरा तर्क देते हैं या करते हैं एक त्रुटि कोड की जाँच नहीं है, तो आप यूबी के लायक हैं)। परिणाम? कार्यान्वयन की गुणवत्ता में बहुत सुधार होता है और समस्याएं जल्दी ठीक हो जाती हैं।
सादगी
अपवाद हैंडलिंग कार्यान्वयन को अक्सर अद्यतित नहीं रखा जाता है। वे बहुत अधिक जटिलता भी जोड़ते हैं क्योंकि एक कार्यान्वयन में कई कई निकास अनुक्रम हो सकते हैं। जब वे अच्छी तरह से परिभाषित, टाइप, बाहर निकलने की रणनीतियों का एक छोटा सा सेट का उपयोग करते हैं और क्लाइंट द्वारा नियंत्रित किया जाता है, तो उच्च जटिल कार्यक्रमों को पढ़ना और बनाए रखना सरल होता है। अन्य मामलों में, कार्यान्वयन समय के साथ अधिक थ्रो को लागू कर सकता है या उनकी निर्भरता उन्हें पेश कर सकती है। ग्राहक इन सभी निकासों से आसानी से या उचित रूप से बचाव नहीं कर सकते हैं। मैं बहुत सारे पुस्तकालयों को लिखता हूं और अपडेट करता हूं, लगातार विकास और सुधार होता है। अपवाद निकास अनुक्रम (एक बड़े कोडबेस में) के साथ सभी को समान रूप से रखने का प्रयास समय का एक अच्छा उपयोग नहीं होगा, और संभवतः बहुत शोर और cruft जोड़ देगा। कार्यक्रम की शुद्धता और अधिक परीक्षणों के कारण,
इतिहास / मौजूदा कोड
कुछ मामलों में, उन्हें ऐतिहासिक कारणों से कभी पेश नहीं किया गया। एक मौजूदा कोडबेस ने उनका उपयोग नहीं किया, कार्यक्रमों को बदलने में मानव-वर्ष लग सकते हैं और सम्मेलनों और कार्यान्वयन में ओवरलैप के कारण इसे बनाए रखने के लिए वास्तव में बदसूरत बना सकते हैं।
downsides
बेशक, डाउनसाइड हैं, सबसे बड़े हैं: अन्य पुस्तकालयों के साथ असंगतता (झुकाव बाइनरी), और यह तथ्य कि आपको इस मॉडल को फिट करने के लिए अच्छी मात्रा में कार्यक्रमों को लागू करना होगा।