HeadlinesBriefing HeadlinesBriefing.com

C++26 कॉन्ट्रैक्ट्स: प्री और पोस्ट कंडीशन

Hacker News •
×

स्टैंडर्ड लाइब्रेरी हार्डनिंग पर लिखे लेख में हमने देखा कि कई लाइब्रेरी आवश्यकताएँ "कॉन्ट्रैक्ट्स" के रूप में व्यक्त की जाती हैं। यह पोस्ट C++26 में कॉन्ट्रैक्ट्स की पड़ताल करती है और बताती है कि उन्हें हमारे अपने कोड पर कैसे लागू किया जा सकता है।

चर्चा एक सरल उदाहरण से शुरू होती है: एक फ़ंक्शन जो दिए गए इंडेक्स पर std::vector से एक मान लौटाता है। पारंपरिक रूप से, इंडेक्स मान्य होने की आवश्यकता फ़ंक्शन बॉडी के भीतर assert द्वारा लागू की जाती है। इस तरीके की कुछ कमियाँ हैं। आवश्यकता इम्प्लीमेंटेशन में रहती है, इसलिए केवल डिक्लेरेशन पढ़ने वाला व्यक्ति एक vector और एक इंडेक्स देखता है, पर दोनों के बीच का संबंध नहीं देख पाता। असर्शन केवल NDEBUG से नियंत्रित होते हैं, और इसे परिभाषित करने पर जाँच पूरी तरह हटा दी जाती है।

C++26 कॉन्ट्रैक्ट्स, जो P2900 के माध्यम से प्रस्तुत हुए हैं, आवश्यकता को फ़ंक्शन सिग्नेचर में ले जाते हैं, पैरामीटर सूची के बाद रखे गए pre(...) क्लॉज़ के रूप में। यह प्रीकंडीशन बताती है कि फ़ंक्शन में प्रवेश करते समय कौन सी शर्त सत्य होने की अपेक्षा है। वही आवश्यकता डिक्लेरेशन पर भी दिखाई जा सकती है, जिससे API पढ़ने वाले हर व्यक्ति को वह दिखे। कॉन्ट्रैक्ट्स कई मूल्यांकन सेमांटिक्स देते हैं, जिनमें जाँच को अनदेखा करना, उल्लंघन की रिपोर्ट करके आगे बढ़ना, या प्रोग्राम को समाप्त करना शामिल है। कौन से विकल्प उपलब्ध हैं और उन्हें कैसे चुना जाता है, यह कंपाइलर इम्प्लीमेंटेशन तय करता है।

कॉन्ट्रैक्ट्स इस बात में भी अंतर करते हैं कि कॉलर को क्या देना होगा और फ़ंक्शन क्या लौटाने का वादा करता है। post के साथ प्रस्तुत पोस्टकंडीशन ये वादे व्यक्त करते हैं, बिना हर return स्टेटमेंट से पहले मैन्युअल जाँच की ज़रूरत के। इसलिए रनटाइम जाँच बंद होने पर भी कॉन्ट्रैक्ट्स API का दस्तावेज़ीकरण करने में उपयोगी रहते हैं।

लेख एक पूर्ण प्रीकंडीशन उदाहरण के साथ समाप्त होता है और पोस्टकंडीशन, डिक्लेरेशन और डेफ़िनिशन पर कॉन्ट्रैक्ट्स की जगह, कंपाइलर विकल्प, तथा ऐसे विवरण जो डेवलपर्स को चौंका सकते हैं, जैसे विषयों को भी कवर करता है।

स्रोत: Hacker News · HeadlinesBriefing द्वारा सारांशित