c# - अहस्ताक्षरित int के CLS क्यों नहीं हैं?




.net unsigned-integer (3)

अहस्ताक्षरित पूर्णांक सीएलएस अनुरूप क्यों नहीं हैं?

मुझे लगता है कि टाइप विनिर्देश केवल प्रदर्शन के लिए है न कि शुद्धता के लिए।


अहस्ताक्षरित int आपको वास्तविक जीवन में उतना हासिल नहीं करता है, हालांकि 1 से अधिक प्रकार के int होने से आपको दर्द होता है, इसलिए बहुत सी भाषाओं ने केवल चींटियों को गाया है।

सीएलएस आज्ञाकारी का उद्देश्य कई भाषाओं से एक वर्ग का उपयोग करने की अनुमति देना है ...

याद रखें कि कोई भी आपको सीएलएस अनुरूप नहीं बनाता है।

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


इस मुद्दे का एक हिस्सा, मुझे संदेह है, इस तथ्य के इर्द-गिर्द घूमता है कि C में अहस्ताक्षरित पूर्णांक प्रकारों को संख्याओं के बजाय एक सार बीजगणितीय रिंग के सदस्यों के रूप में व्यवहार करना आवश्यक है [उदाहरण के लिए, यदि कोई अहस्ताक्षरित 16-बिट पूर्णांक चर शून्य के बराबर है। , इसे घटाने के लिए 65,535 की आवश्यकता होती है, और अगर यह 65,535 के बराबर है, तो इसे बढ़ाने के लिए शून्य उपज की आवश्यकता होती है।] ऐसे समय होते हैं जब ऐसा व्यवहार अत्यंत उपयोगी होता है, लेकिन संख्यात्मक प्रकार ऐसे व्यवहार का प्रदर्शन कुछ भाषाओं की भावना के खिलाफ हो सकता है। । मैं अनुमान लगाता हूं कि अहस्ताक्षरित प्रकारों को छोड़ देने का निर्णय संभवतः जाँच और अनियंत्रित संख्यात्मक संदर्भों दोनों का समर्थन करने का निर्णय करता है। व्यक्तिगत रूप से, मेरी इच्छा है कि अहस्ताक्षरित संख्या और बीजगणितीय रिंगों के लिए अलग-अलग पूर्णांक प्रकार थे; अहस्ताक्षरित माइनस ऑपरेटर को अहस्ताक्षरित 32-बिट संख्या पर लागू करने पर 64-बिट हस्ताक्षरित परिणाम प्राप्त करना चाहिए [शून्य के अलावा किसी भी चीज़ को नकारने से ऋणात्मक संख्या प्राप्त होगी] लेकिन एक अंगूठी प्रकार के लिए एक शून्य ऋण को लागू करने से उस अंगूठी के भीतर योजक व्युत्क्रम का उत्पादन करना चाहिए।

किसी भी स्थिति में, अहस्ताक्षरित पूर्णांक CLS के अनुरूप नहीं हैं, यह है कि Microsoft ने निर्णय लिया कि भाषाओं को अहस्ताक्षरित पूर्णांक का समर्थन करने के लिए "CLS संगत" नहीं माना जाना चाहिए।


सभी भाषाओं में अहस्ताक्षरित ints की अवधारणा नहीं है। उदाहरण के लिए VB 6 में अहस्ताक्षरित किलों की कोई अवधारणा नहीं थी, जो मुझे संदेह है कि VB7 / 7.1 के डिजाइनरों ने निर्णय लिया कि वे इसे लागू न करें (यह अब VB8 में लागू है)।

उद्धरण के लिए:

http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

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

अद्यतन: मैंने कुछ साल पहले इस बारे में आश्चर्य किया था, और जब तक मैं यह नहीं देख सकता कि एक यूआईएनटी सुरक्षा सत्यापन योग्य क्यों नहीं होगा, मुझे लगता है कि सीएलएस लोगों को कहीं न कहीं एक कट ऑफ पॉइंट होना चाहिए था कि आधारभूत न्यूनतम क्या होगा समर्थित मूल्य प्रकारों की संख्या। जब आप दीर्घावधि के बारे में सोचते हैं, जहां सीएलआर के लिए अधिक से अधिक भाषाओं को पोर्ट किया जा रहा है, तो उन्हें सीएलएस अनुपालन हासिल करने के लिए अहस्ताक्षरित ints को लागू करने के लिए मजबूर क्यों किया जाता है अगर कोई अवधारणा नहीं है, कभी?





cls-compliant