अद्यतन: This question was the subject of my blog in July 2013. महान प्रश्न के लिए धन्यवाद!
J.Kommer के जवाब (क्या जाहिर कल्पना खुदाई का एक बहुत था! करने के लिए और उन पर अच्छा), लेकिन मैंने सोचा कि मैं एक छोटे से ऐतिहासिक परिप्रेक्ष्य जोड़ना होगा सही है।
जब मैड्स और मैं सी # 3.0 के विनिर्देश के विभिन्न हिस्सों के सटीक शब्दों को हल कर रहे थे तो हमें एहसास हुआ कि "शून्य प्रकार" विचित्र था। यह केवल एक मान के साथ एक "प्रकार" है। यह एक "प्रकार" है कि प्रतिबिंब के बारे में कुछ भी नहीं जानता है। यह एक "प्रकार" है जिसका नाम नहीं है, कि GetType कभी वापस नहीं आती है, कि आप स्थानीय चर या फ़ील्ड या किसी भी प्रकार के प्रकार के रूप में निर्दिष्ट नहीं कर सकते हैं।संक्षेप में, यह वास्तव में एक "प्रकार" है जो टाइप सिस्टम को "पूर्ण" बनाने के लिए है, ताकि प्रत्येक संकलन-समय अभिव्यक्ति में एक प्रकार हो।
सिवाय इसके कि सी # में पहले से ही अभिव्यक्तियां थीं जिनके पास कोई प्रकार नहीं था: सी # 1.0 में विधि समूह, सी # 2.0 में अज्ञात विधियां और सी # 3.0 में लैम्बडास में कोई प्रकार नहीं है। यदि उन सभी चीजों में कोई प्रकार नहीं हो सकता है, तो हमें एहसास हुआ कि "शून्य" के पास एक प्रकार की आवश्यकता नहीं है। इसलिए हमने सी # 3.0 में बेकार "शून्य प्रकार" के संदर्भ हटा दिए।
एक कार्यान्वयन विस्तार के रूप में, सी # 1.0 के माध्यम से 5.0 के माइक्रोसॉफ्ट कार्यान्वयन में सभी के पास "शून्य प्रकार" का प्रतिनिधित्व करने के लिए एक आंतरिक वस्तु है। उनके पास गैर-मौजूदा प्रकार के लैम्ब्डा, अज्ञात विधियों और विधि समूहों का प्रतिनिधित्व करने के लिए वस्तुएं भी हैं। इस कार्यान्वयन विकल्प में कई पेशेवर और विपक्ष हैं। प्रो पक्ष पर, संकलक किसी भी अभिव्यक्ति के प्रकार के लिए पूछ सकता है और एक जवाब प्राप्त कर सकते हैं। कॉन साइड पर, इसका मतलब है कि कभी-कभी प्रकार के विश्लेषण में बग जो वास्तव में कंपाइलर को क्रैश कर लेते हैं, इसके बजाय कार्यक्रमों में अर्थपूर्ण परिवर्तन होते हैं। इसका मेरा पसंदीदा उदाहरण यह है कि अवैध अभिव्यक्ति "शून्य ?? शून्य" का उपयोग करने के लिए सी # 2.0 में संभव है; एक बग के कारण संकलक ??
ऑपरेटर के गलत उपयोग के रूप में इसे ध्वजांकित करने में विफल रहता है, और यह अनुमान लगाता है कि इस अभिव्यक्ति का प्रकार "शून्य प्रकार" है, भले ही यह शून्य शब्दशः न हो। तब यह कई अन्य डाउनस्ट्रीम बग का कारण बनता है क्योंकि टाइप विश्लेषक इस प्रकार की समझ को समझने की कोशिश करता है।
रोज़लिन में हम शायद इस रणनीति का उपयोग नहीं करेंगे; बल्कि, हम बस संकलक कार्यान्वयन में सेंकना होगा कि कुछ अभिव्यक्तियों में कोई प्रकार नहीं है।
स्रोत
2011-11-21 16:50:08
मैं बिल्कुल एक प्रकार के रूप में शून्य का वर्णन नहीं करता। – ChaosPandion
@ChosPandion: तो, सी # नहीं _every_ अभिव्यक्ति में एक प्रकार है? – Vlad
वैसे मैं स्पष्ट रूप से गलत हूं। – ChaosPandion