जावा में, आप गलत तरीके से सिंक्रनाइज़ प्रोग्राम के व्यवहार को अपरिभाषित मान सकते हैं।
जावा 7 जेएलएस 17.4.8 में एक बार "अपरिभाषित" शब्द का उपयोग करता है । अपवाद और कारण आवश्यकताएँ :
हम का उपयोग f|d
समारोह के डोमेन सीमित कर दिया निरूपित करने के लिए f
करने के लिए d
। सभी के लिए x
में d
, f|d(x) = f(x)
है, और सभी के लिए x
नहीं d
, f|d(x)
है अपरिभाषित ...
जावा API दस्तावेज़ निर्दिष्ट करता है कुछ मामलों जब परिणाम अपरिभाषित कर रहे हैं - उदाहरण के लिए, में (बहिष्कृत) निर्माता की तारीख (पूर्णांक साल, पूर्णांक महीने, पूर्णांक दिन) :
यदि कोई दिया गया तर्क सीमा से बाहर है तो परिणाम अपरिभाषित है ...
ExecutorService.invokeAll (संग्रह) स्थिति के लिए Javadocs :
यदि यह ऑपरेशन प्रगति पर है, तो इस पद्धति के परिणाम अपरिभाषित हैं ।
उदाहरण के लिए समवर्ती "अपरिभाषित" व्यवहार का कम औपचारिक प्रकार पाया जा सकता है , जहां एपीआई डॉक्स "सर्वश्रेष्ठ प्रयास" शब्द का उपयोग करते हैं:
ध्यान दें कि असफल-तेज़ व्यवहार की गारंटी नहीं दी जा सकती है क्योंकि यह आमतौर पर बोल रहा है, असम्बद्ध समवर्ती संशोधन की उपस्थिति में किसी भी हार्ड गारंटी को असंभव बनाता है। असफल-फास्ट संचालन ConcurrentModificationException
एक सर्वोत्तम-प्रयास के आधार पर फेंकते हैं। इसलिए, एक प्रोग्राम लिखना सही होगा जो इस अपवाद पर निर्भर था इसकी शुद्धता के लिए ...
अनुबंध
सवाल टिप्पणियों में से एक एरिक लिपर्ट के एक लेख को संदर्भित करता है जो विषय मामलों में उपयोगी परिचय प्रदान करता है: कार्यान्वयन-परिभाषित व्यवहार ।
मैं इस लेख को भाषा-अज्ञेय तर्क के लिए सुझाता हूं, हालांकि यह ध्यान में रखने योग्य है कि लेखक सी # को लक्षित करता है, जावा को नहीं।
परंपरागत रूप से हम कहते हैं कि एक प्रोग्रामिंग भाषा के मुहावरे में अपरिभाषित व्यवहार होता है अगर उस मुहावरे के उपयोग से कोई प्रभाव पड़ सकता है; यह आपके द्वारा अपेक्षित तरीके से काम कर सकता है या यह आपकी हार्ड डिस्क को मिटा सकता है या आपकी मशीन को क्रैश कर सकता है। इसके अलावा, संकलक लेखक आपको अपरिभाषित व्यवहार के बारे में चेतावनी देने के लिए बाध्य नहीं है। (और वास्तव में, कुछ भाषाएँ हैं जिनमें प्रोग्राम जो "अपरिभाषित व्यवहार" का उपयोग करते हैं, मुहावरों को संकलित करने के लिए भाषा विनिर्देश द्वारा अनुमति दी जाती है!) ...
इसके विपरीत, एक मुहावरा जिसमें कार्यान्वयन-परिभाषित व्यवहार होता है वह व्यवहार होता है जहां संकलक लेखक के पास सुविधा को लागू करने के तरीके के बारे में कई विकल्प होते हैं, और उसे चुनना चाहिए। जैसा कि नाम का तात्पर्य है, कार्यान्वयन-परिभाषित व्यवहार कम से कम परिभाषित है। उदाहरण के लिए, जब कोई पूर्णांक विभाजन ओवरफ्लो होता है, तो C # एक अपवाद को लागू करने या एक मान उत्पन्न करने के लिए कार्यान्वयन की अनुमति देता है, लेकिन कार्यान्वयन को चुनना चाहिए। यह आपकी हार्ड डिस्क को नहीं मिटा सकता ...
ऐसे कुछ कारक हैं जो एक भाषा डिजाइन समिति को कुछ भाषा मुहावरों को अपरिभाषित या कार्यान्वयन-परिभाषित व्यवहार के रूप में छोड़ने के लिए नेतृत्व करते हैं?
पहला प्रमुख कारक है: क्या बाज़ार में भाषा के दो मौजूदा कार्यान्वयन हैं जो किसी विशेष कार्यक्रम के व्यवहार पर असहमत हैं? ...
अगला प्रमुख कारक है: क्या सुविधा स्वाभाविक रूप से कार्यान्वयन के लिए कई अलग-अलग संभावनाएं प्रस्तुत करती है, जिनमें से कुछ स्पष्ट रूप से दूसरों की तुलना में बेहतर हैं? ...
एक तीसरा कारक है: क्या सुविधा इतनी जटिल है कि उसके सटीक व्यवहार का विस्तृत विराम निर्दिष्ट करना मुश्किल या महंगा होगा? ...
एक चौथा कारक है: क्या विश्लेषण करने के लिए फीचर कंपाइलर पर अधिक बोझ डालता है? ...
एक पाँचवाँ कारक है: क्या सुविधा रनटाइम वातावरण पर एक उच्च बोझ लादती है? ...
एक छठा कारक है: व्यवहार को कुछ प्रमुख अनुकूलन को परिभाषित करने से रोकता है? ...
वे सिर्फ कुछ कारक हैं जो दिमाग में आते हैं; निश्चित रूप से कई, कई अन्य कारक हैं जो एक विशेषता "कार्यान्वयन परिभाषित" या "अपरिभाषित" बनाने से पहले भाषा डिजाइन समितियों पर बहस करते हैं।
ऊपर केवल एक बहुत ही संक्षिप्त कवरेज है; पूर्ण लेख में इस अंश में वर्णित बिंदुओं के लिए स्पष्टीकरण और उदाहरण हैं; यह है बहुत लायक पढ़ने। उदाहरण के लिए, "छठे कारक" के लिए दिए गए विवरण जावा मेमोरी मॉडल ( जेएसआर 133 ) में कई बयानों के लिए प्रेरणा में एक अंतर्दृष्टि दे सकते हैं , यह समझने में मदद करते हैं कि कुछ अनुकूलन की अनुमति क्यों है, अपरिभाषित व्यवहार के लिए अग्रणी जबकि अन्य निषिद्ध हैं, अग्रणी सीमाएँ जैसे -पहले और कार्य - कारण की आवश्यकताएँ ।
लेख सामग्री में से कोई भी मेरे लिए विशेष रूप से नया नहीं है, लेकिन अगर मैं कभी भी इसे इतने सुरुचिपूर्ण, आकर्षक और समझने योग्य तरीके से प्रस्तुत करता हूं तो मुझे बहुत परेशानी होगी। गजब का।