अल्प परिपथ निरूपण

अल्प परिपथ निरूपण, न्यूनतम मूल्यांकन, या मैककार्थी मूल्यांकन (जॉन मैककार्थी (कंप्यूटर वैज्ञानिक) के बाद) कुछ प्रोग्रामिंग भाषाओं में कुछ बूलियन ऑपरेटरों का शब्दार्थ है जिसमें दूसरा तर्क केवल तभी निष्पादित या मूल्यांकन किया जाता है जब पहला तर्क निर्धारित करने के लिए पर्याप्त नहीं होता है। अभिव्यक्ति का मूल्य: जब  का पहला तर्क   का मूल्यांकन करता है कुल मान   होना चाहिए; और जब   का पहला तर्क   का मूल्यांकन करता है,  तो कुल मान   होना चाहिए।

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

अल्प परिपथ ऑपरेटर, प्रभाव में, सरल अंकगणितीय ऑपरेटरों के बजाय नियंत्रण संरचनाएं हैं, क्योंकि वे सख्त कार्य नहीं हैं। अनिवार्य भाषा के शब्दों में (विशेष रूप से सी (प्रोग्रामिंग भाषा) और सी ++), जहां दुष्प्रभाव महत्वपूर्ण, अल्प परिपथ ऑपरेटर अनुक्रम बिंदु प्रस्तुत करते हैं - वे वे दूसरे तर्क को संसाधित करने से पहले (वैकल्पिक रूप से) किसी भी दुष्प्रभाव (कंप्यूटर विज्ञान) सहित पहले तर्क का पूरी तरह से मूल्यांकन करते हैं। ऐल्गॉल 68 ने उपयोगकर्ता-परिभाषित अल्प परिपथ ऑपरेटरों और प्रक्रियाओं को प्राप्त करने के लिए प्रक्रिया का उपयोग किया था।

समस्यात्मक के रूप में अल्प परिपथ ऑपरेटरों के उपयोग की आलोचना की गई है: "सशर्त संयोजक — " cand " और " cor " संक्षेप में — ... कम निर्दोष हैं जितना वे पहली द्रष्टि में लग सकते हैं। उदाहरण के लिए, cor cand पर वितरित नहीं करता: तुलना करें (A cand B) cor C साथ (A cor C) cand (B cor C); ¬A ∧ C के स्थिति में, दूसरी अभिव्यक्ति के लिए B को परिभाषित करने की आवश्यकता है, पहले वाले को को परिभाषित करने की आवश्यकता नही है। क्योंकि सशर्त संयोजक इस प्रकार प्रोग्रामों के बारे में औपचारिक तर्क को जटिल करते हैं, उन्हें उत्तम विधि से टाला जाता है।"

- एडजर डब्ल्यू. डिज्कस्ट्रा<रेफरी>एडजर डब्ल्यू. दिज्क्स्ट्रा "कुछ सीमा तक निराशाजनक पत्राचार पर", ईडब्ल्यूडी1009-0, 25 मई 1987 /ewd10xx/EWD1009.PDF पूरा टेक्स्ट

परिभाषा
अल्प परिपथ निरूपण को लागू करने वाली किसी भी प्रोग्रामिंग भाषा में, अभिव्यक्ति  सशर्त (प्रोग्रामिंग) अभिव्यक्ति के बराबर है , और अभिव्यक्ति     के बराबर है।  किसी भी स्थिति में, x का मूल्यांकन केवल बार किया जाता है।

ऊपर दी गई सामान्यीकृत परिभाषा शिथिल रूप से टाइप की गई भाषाओं को समायोजित करती है, जिनमें दो सत्य-मान  और   से अधिक होते हैं, जहां अल्प परिपथ ऑपरेटर अंतिम मूल्यांकन किए गए अभिव्यक्ति को वापस कर सकते हैं। इसे नीचे दी गई तालिका में अंतिम मान कहा जाता है। सख्ती से टाइप की गई भाषा के लिए, बूलियन स्थिति के लिए अभिव्यक्ति को क्रमशः   और   के लिए सरल किया जाता है।

वरीयता
यद्यपि AND ऑपरेटर की प्राथमिकता लेता है OR कई भाषाओं में, यह अल्प परिपथ निरूपण की सार्वभौमिक संपत्ति नहीं है। पोसिक्स शेल का कमांड-लिस्ट सिंटैक्स समान प्राथमिकता लेने वाले और दूसरे के साथ बाएं-सहयोगी होने वाले दो ऑपरेटर का उदाहरण है।

निम्नलिखित सरल बाएँ से दाएँ मूल्यांकनकर्ता एक continue रखने के द्वारा AND ऊपर OR की प्राथमिकता को लागू करता है:

औपचारिकता
अल्प परिपथ लॉजिक, दुष्प्रभाव के साथ या बिना, होरे लॉजिक # सशर्त नियम के आधार पर औपचारिक रूप दिया गया है। होरे की सशर्त। नतीजा यह है कि गैर-अल्प परिपथिंग ऑपरेटरों को मूल्यांकन के समान अनुक्रम के लिए अल्प परिपथ तर्क से परिभाषित किया जा सकता है।

सामान्य प्रोग्रामिंग और स्क्रिप्टिंग भाषाओं में समर्थन
1 एबीएपी और एपीएल का कोई विशिष्ट बूलियन प्रकार नहीं है। 2 जब ऑपरेटर ओवरलोडिंग करता है, तो ऑपरेटर्स  और   उत्सुक हैं और किसी भी प्रकार का रिटर्न दे सकते हैं। 3 यह केवल रनटाइम-मूल्यांकित एक्सप्रेशन,   और   पर लागू होता हैं। स्टेटिक इनिशियलाइज़र्स या मेनिफ़ेस्ट कांस्टेंट में एक्सप्रेशन उत्सुक मूल्यांकन का उपयोग करते हैं। 4 फोरट्रान ऑपरेटर न तो अल्प परिपथ हैं और न ही उत्सुक: भाषा विनिर्देश संकलक को अनुकूलन के लिए विधि का चयन करने की अनुमति देता है। 5 पास्कल (प्रोग्रामिंग भाषा) आईएसओ/आईईसी 10206:1990 विस्तारित पास्कल आईएसओ/आईईसी 10206:1990 विस्तारित पास्कल अल्प परिपथिंग की अनुमति देता है, किन्तु इसकी आवश्यकता नहीं है। 6 आईएसओ/आईईसी 10206:1990 एक्सटेंडेड पास्कल सपोर्ट करता है   और. 7 स्मॉलटाक तर्क के रूप में लंबे समय तक अल्प परिपथ शब्दार्थ का उपयोग करता है  ब्लॉक (उदाहरण के लिए,  ) है। 8 सीएएसई कथनों का समर्थन करने वाली मूलभूत भाषाएं सशर्त मूल्यांकन प्रणाली का उपयोग करके, न कि स्थिर लेबलों तक सीमित जंप टेबल के रूप में ऐसा करती हैं। 9 डेल्फी (प्रोग्रामिंग भाषा) और अल्प परिपथ मूल्यांकन के लिए  फ़्री पास्कल  डिफॉल्ट होता हैं। इसे कंपाइलर विकल्पों द्वारा बदला जा सकता है किन्तु व्यापक रूप से उपयोग नहीं किया जाता है। 10 मानक आईईसी 61131-3 वास्तव में यदि परिभाषित नहीं करता है  कि क्या   और   अल्प परिपथ निरूपण का उपयोग करते हैं और यह ऑपरेटरों   और   को परिभाषित नहीं करता है। तालिका में प्रविष्टियाँ दिखाती हैं कि यह बेकहॉफ़ ट्विनकैट® के लिए कैसे काम करता है।

दूसरे तर्क के अवांछित दुष्प्रभावों से बचना
सी-आधारित भाषा का उपयोग करते हुए सामान्य उदाहरण: निम्नलिखित उदाहरण पर विचार करें: इस उदाहरण में, अल्प परिपथ निरूपण इसकी गारंटी देता है कि  को कभी कॉल नहीं जाता है। यह है ऐसा इसलिए है क्योंकि   असत्य का मूल्यांकन करता है। यह सुविधा दो उपयोगी प्रोग्रामिंग निर्माणों की अनुमति देती है।


 * 1) यदि पहली उप-अभिव्यक्ति यह जाँचती है कि क्या महंगी संगणना की आवश्यकता है और जाँच असत्य का मूल्यांकन करती है, तो दूसरे तर्क में महंगी संगणना को समाप्त किया जा सकता है।
 * 2) यह निर्माण की अनुमति देता है जहां पहली अभिव्यक्ति ऐसी स्थिति की गारंटी देती है जिसके बिना दूसरी अभिव्यक्ति रन-टाइम त्रुटि का कारण बन सकती है।

दोनों को निम्नलिखित सी स्निपेट में चित्रित किया गया है जहां न्यूनतम मूल्यांकन शून्य सूचक विचलन और अतिरिक्त मेमोरी दोनों को रोकता है:

सिद्धप्रयुक्त सशर्त निर्माण
चूंकि न्यूनतम मूल्यांकन ऑपरेटर की सिमेंटिक परिभाषा का भाग है और वैकल्पिक संकलक अनुकूलन नहीं है, इसलिए कई कोडिंग शैली संक्षिप्त सशर्त निर्माण के रूप में इस पर विश्वाश करते हैं। उदाहरणों में सम्मिलित:

पर्ल शैली: पोसिक्स शेल शैली: यह शैली ऐसा मानती है  विफल नहीं हो सकती हैं।

संभावित समस्याएं
अनुपचारित दूसरी स्थिति अकुशल दुष्प्रभाव की ओर ले जाती है

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

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

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

ऐसे स्थिति के लिए अनुकूलन करने में असमर्थ कंपाइलर का उदाहरण जावा (प्रोग्रामिंग भाषा) का हॉटस्पॉट वीएम 2012 तक है।

यह भी देखें

 * परवाह न करने की स्थिति