दिलचस्प पोस्ट
600851475143 के लिए "पूर्णांक संख्या बहुत बड़ी" त्रुटि संदेश पेज रिफ्रेश के बिना जावा के साथ हैश को कैसे हटाया जा सकता है? PHP में डेटा को एन्क्रिप्ट / डिक्रिप्ट कैसे करें? लॉगिन विफल होने के बाद पुनर्निर्देशित करें एक चयन सूची में शब्द लपेटें विकल्प जब वास्तव में यह (गुमनाम) आंतरिक कक्षाओं का उपयोग करने के लिए सुरक्षित रिसाव है? क्यों नल एक वस्तु है और रिक्त और अपरिभाषित के बीच अंतर क्या है? एक संरचना को शून्य करने के लिए memset () या मान प्रारंभ करना? क्यों हमेशा बंद डेटाबेस कनेक्शन? @ आयात बनाम लिंक मैं सी ++ 11 सीएएस के साथ एबीए काउंटर कैसे लागू कर सकता हूं? एक जार फ़ाइल में रिलीज को मर्ज करने का सबसे आसान तरीका जावा में स्ट्रिंग में वर्तमान दिनांक को कैसे परिवर्तित किया जाए? घुमाए गए आयताकार में सबसे बड़ा आयत की गणना करें Winform संदेश बॉक्स में क्लिक करने योग्य यूआरएल?

वास्तव में "जैसा-अगर" नियम क्या है?

जैसा कि शीर्षक कहते हैं,

वास्तव में "जैसा-अगर" नियम क्या है?

एक विशिष्ट जवाब मिल जाएगा:

नियम जो कि किसी भी और सभी कोड परिवर्तनों की अनुमति देता है जो कार्यक्रम के अवलोकन व्यवहार को बदल नहींते

समय-समय पर हम कुछ कार्यान्वयन से व्यवहार प्राप्त करते हैं जो इस नियम के लिए जिम्मेदार हैं। कई बार गलत तरीके से तो, यह नियम वास्तव में क्या है। मानक इस नियम को एक खंड या पैराग्राफ के रूप में स्पष्ट रूप से नहीं दर्शाता है, तो क्या वास्तव में इस नियम के दायरे में आता है? मेरे लिए यह एक ग्रे क्षेत्र जैसा लगता है जो मानक द्वारा विस्तार से परिभाषित नहीं है। किसी व्यक्ति को मानक से संदर्भों का हवाला देकर विवरणों को विस्तृत कर सकते हैं।

नोट: इसे सी और सी ++ के रूप में टैग करना, क्योंकि यह दोनों भाषाओं के लिए प्रासंगिक है

वेब के समाधान से एकत्रित समाधान "वास्तव में "जैसा-अगर" नियम क्या है?"

" जैसा-अगर " नियम क्या है?

" जैसा-अगर " नियम मूल रूप से परिभाषित करता है कि कौन से परिवर्तन कानूनी रूप से लागू करने के लिए एक कानूनी C ++ प्रोग्राम पर निष्पादन करने की अनुमति है संक्षेप में, सभी परिवर्तनों, जो किसी प्रोग्राम के " अवलोकनत्मक व्यवहार " को प्रभावित नहीं करते हैं (नीचे एक सटीक परिभाषा के लिए देखें) अनुमति दी जाती है।

लक्ष्य को अनुकूलन करने के लिए कार्यान्वयन स्वतंत्रता देना है, जब तक कि कार्यक्रम का व्यवहार सी ++ मानक द्वारा किसी सार मशीन के संदर्भ में वर्णित शब्दों के अनुरूप रहता है।


मानक इस नियम को कहां से पेश करता है?

सी ++ 11 मानक परिच्छेद 1.9 / 1 में " जैसा-अगर " नियम पेश करता है:

इस अंतर्राष्ट्रीय मानक में शब्दावली का विवरण एक पैरामीट्रैक्टेड नैंडेटिरिमस्टिक सार मशीन को परिभाषित करता है। यह अंतर्राष्ट्रीय मानक, कार्यान्वयन के अनुरूप होने की संरचना पर कोई आवश्यकता नहीं रखता है। विशेष रूप से, उन्हें अमूर्त मशीन की संरचना की नकल या अनुकरण की आवश्यकता नहीं है। इसके बजाय, अनुरूपताओं को अनुरूप करने की आवश्यकता है (केवल) अमूर्त मशीन के अवलोकनत्मक व्यवहार जैसा कि नीचे बताया गया है।

इसके अलावा, एक व्याख्यात्मक फुटनोट कहते हैं:

इस प्रावधान को कभी-कभी "जैसा-अगर" नियम कहा जाता है , क्योंकि एक कार्यान्वयन इस अंतरराष्ट्रीय मानक की किसी भी आवश्यकता को अनदेखा करने के लिए स्वतंत्र है, जब तक नतीजा यह होता है कि आवश्यकता का पालन किया गया है, जहां तक ​​परिकलन व्यवहार से निर्धारित किया जा सकता है कार्यक्रम का उदाहरण के लिए, एक वास्तविक क्रियान्वयन के लिए अभिव्यक्ति के हिस्से का मूल्यांकन नहीं किया जाता है, यदि यह पता लगाया जा सकता है कि इसकी कीमत का उपयोग नहीं किया गया है और इस कार्यक्रम के निरीक्षण योग्य व्यवहार को प्रभावित करने वाला कोई दुष्प्रभाव नहीं होता है।


नियम जनादेश ठीक क्या है?

अनुच्छेद 1.9 / 5 आगे निर्दिष्ट करता है:

एक सुव्यवस्थित कार्यक्रम निष्पादित करने वाला एक अनुरूप कार्यान्वयन समान कार्यक्रम और इसी इनपुट के साथ सार मशीन की इसी आवृत्ति के संभव निष्पादन में से एक के रूप में एक समान अनुचित व्यवहार का उत्पादन करेगा । हालांकि, यदि किसी भी निष्पादन में एक अपरिभाषित संचालन शामिल है, तो यह इंटरनेशनल स्टैण्डर्ड उस प्रोग्राम को कार्यान्वित करने के कार्यान्वयन पर कोई ज़रूरत नहीं रखता है (पहले अपरिभाषित संचालन से पहले कार्यवाही के संबंध में भी नहीं)

यह इस बात पर जोर देने के लायक है कि जब " केवल एक अच्छी तरह से गठित कार्यक्रम निष्पादित" पर बाधा आती है , और एक प्रोग्राम निष्पादित करने के संभावित परिणाम जो अनिर्धारित व्यवहार होते हैं, पैरा 1 9/4 के रूप में भी स्पष्ट किया गया है:

कुछ अन्य कार्यों को इस अंतर्राष्ट्रीय मानक में अपरिभाषित रूप में वर्णित किया गया है (उदाहरण के लिए, const वस्तु को संशोधित करने का प्रयास) [नोट: यह इंटरनेशनल स्टैंडर्ड उन कार्यक्रमों के व्यवहार पर कोई आवश्यकता नहीं लगाता है जिसमें अपरिभाषित व्यवहार शामिल होते हैं । -नोट नोट]

अंत में, " अवलोकनत्मक व्यवहार " की परिभाषा से संबंधित पैराग्राफ 1.9 / 8 निम्न प्रकार से है:

अनुरूप अनुरूप कार्यान्वयन पर कम से कम आवश्यकताएं हैं:

– अस्थिर वस्तुओं के उपयोग को सार मशीन के नियमों के अनुसार कड़ाई से मूल्यांकन किया जाता है।

– प्रोग्राम समाप्ति पर, फाइल में लिखे गए सभी आंकड़े संभावित परिणामों में से एक के समान होंगे, जो अमूर्त शब्दों के अनुसार प्रोग्राम का निष्पादन होगा।

– इंटरैक्टिव उपकरणों की इनपुट और आउटपुट गतिशीलता ऐसी स्थिति में होनी चाहिए जो वास्तव में इनपुट के लिए इंतजार करने से पहले उत्पादन वास्तव में वितरित हो जाता है। क्या एक इंटरैक्टिव डिवाइस का गठन कार्यान्वयन-परिभाषित है।

इन सामूहिक रूप से कार्यक्रम के नमूदार व्यवहार के रूप में संदर्भित किया जाता है । [ नोट : सार और वास्तविक शब्दों के बीच अधिक कड़े संवाद प्रत्येक कार्यान्वयन द्वारा परिभाषित किया जा सकता है – अंत नोट ]


क्या ऐसी स्थितियां हैं जहां यह नियम लागू नहीं होता है?

मेरे सबसे अच्छे ज्ञान के लिए, " जैसा-अगर " नियम का एकमात्र अपवाद / प्रतिलिपि एलिसन है, जिसे अनुमति दी जाती है, भले ही प्रतिलिपि कन्स्ट्रक्टर, कंसट्रक्टर को स्थानांतरित करने, या किसी क्लास के डिस्ट्रक्टर के पास साइड इफेक्ट होते हैं इसके लिए सटीक परिस्थितियां पैरा 12.8 / 31 में निर्दिष्ट हैं:

जब कुछ मानदंडों को पूरा किया जाता है, तो एक कार्यान्वयन को किसी वस्तु के प्रतिलिपि / स्थानांतरित निर्माण को छोड़ने की अनुमति होती है, भले ही कन्स्ट्रक्टर को कॉपी / स्थानांतरित ऑपरेशन के लिए चुना गया हो और / या ऑब्जेक्ट के लिए डिस्ट्रिक्ट के पास साइड इफेक्ट होते हैं […]

सी 11 में नियम को उस नाम से कभी नहीं कहा जाता है। हालांकि सी, बस सी ++ की तरह, अमूर्त मशीन के मामले में व्यवहार को परिभाषित करता है। जैसा कि नियम C11 5.1.2.3 पी 6 में है :

  1. अनुरूप अनुरूप कार्यान्वयन पर कम से कम आवश्यकताएं हैं:

    • volatile वस्तुओं के उपयोग को सार मशीन के नियमों के अनुसार कड़ाई से मूल्यांकन किया जाता है।
    • प्रोग्राम समाप्ति पर, फाइल में लिखे गए सभी डेटा परिणाम के समान होंगे, जो अमूर्त शब्दों के अनुसार प्रोग्राम का निष्पादन होगा।
    • इंटरेक्टिव डिवाइसेस की इनपुट और आउटपुट डायनेमिक्स 7.21.3 में निर्दिष्ट के अनुसार होगी । इन आवश्यकताओं का इरादा यह है कि यह सुनिश्चित करने के लिए कि संकेत मिलने वाले संदेशों को इनपुट के लिए इंतजार कर रहे किसी कार्यक्रम से पहले दिखाई देने के लिए जल्द से जल्द प्रकट होने वाले या बन्द-बफर आउटपुट दिखाई दें।

    यह प्रोग्राम का नमूदार व्यवहार है