अहस्ताक्षरित int क्यों CLS के अनुरूप नहीं हैं?


111

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

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

जवाबों:


88

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

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

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

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

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


@ केविन: मैं बस विषय के बारे में सोचता था। आप जवाब तर्क लगता है। मैं सिर्फ विषय के बारे में सोचना पसंद करता हूं। मुझे लगता है कि यह शर्म की बात है पास्कल जैसे प्रकारों ने इसे सीएलआर में नहीं बनाया। लेकिन अन्य भाषाओं के बारे में आपका तर्क: जो स्टोंप्ली स्टैटिक टाइपिंग सीएलआर में दृढ़ता से गतिशील टाइपिंग (डीएलआर) का उपयोग करके आयरनपाइथन को रोक नहीं पाया?
डॉकमैन

@doekman: Wh Yes Yes IronPython और IronRuby यह प्रदर्शित करता है कि CLR एक मंच प्रदान कर सकता है जिस पर आप गतिशील रूप से टाइप की गई भाषाएं बना सकते हैं, CLS का लक्ष्य ऐसे मानकों का एक सेट प्रदान करना था जो भाषा की कार्यक्षमता को पार करते हैं और उन्हें तेजी से और सुरक्षित रूप से इंटरप्रेट करने की अनुमति देते हैं। मुझे नहीं लगता कि DL सुविधाओं को जोड़ने के संदर्भ में कोई भाषा क्या कर सकती है, इसका सीधा संबंध सीएलएस / सीटीएस में क्या होना चाहिए।
केव

मेरी समझ से, सीएलआर में एक 32-बिट पूर्णांक आदिम प्रकार है, जिसमें अतिप्रवाह जाँच के साथ हस्ताक्षरित जोड़ के लिए अलग-अलग निर्देश हैं, अतिप्रवाह जाँच के साथ अहस्ताक्षरित जोड़, और साइन-अज्ञेय जोड़ mod 2 ^ 32, आदि; जब किसी ऑब्जेक्ट संदर्भ को 32-बिट पूर्णांक आदिम में बदलने के लिए कहा जाता है, तो सीएलआर न तो जानता है और न ही परवाह करता है कि क्या उस नंबर का उपयोग करने वाला कोड यह हस्ताक्षरित या अहस्ताक्षरित होने की उम्मीद करता है। कंपाइलर का मानना ​​है कि एक संख्या पर हस्ताक्षर किए गए हैं या अहस्ताक्षरित आम तौर पर प्रभावित करेगा कि संकलक इसके साथ संचालन के लिए क्या निर्देश उत्पन्न करता है, लेकिन यह एक भाषा है - सीएलआर - मुद्दा नहीं।
सुपरकैट

23

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

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


गणितीय दृष्टिकोण से उत्कृष्ट व्याख्या!
दिगंबर

6

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

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

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

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


16
वे बहुत आवश्यक हैं, अगर आप किसी भी बिट-अंकगणित कर रहे हैं।
निकोडेमस 13

@ nicodemus13 जब आखिरी बार है कि आपने एक व्यवसाय व्यवस्थापक प्रणाली देखी है जिसके पास अपने समस्या क्षेत्र में बिट-वार अंकगणित था? (जैसे सॉफ्टवेयर के प्रकार जो VB.NET प्रोग्रामर लिखते हैं)
इयान रिंगरोज

38
एक चेकसम के साथ कुछ भी बिट-वार अंकगणित का उपयोग करेगा, यह काफी सामान्य है, और यह मुझे हर दूसरी भाषा को नीचे खींचने के लिए अजीब लगता है, क्योंकि वीबी ने अहस्ताक्षरित पूर्णांक का समर्थन नहीं किया। .NET का मतलब जेनेरिक होना है, न कि केवल LB ऐप्स के VB- लेखकों के लिए। जब आप '1 प्रकार का int' कहते हैं, तो आपको नहीं लगता कि बाइट, शॉर्ट, इंट, लॉन्ग भी एक दर्द है? मैं यह नहीं देखता कि हस्ताक्षर करना अधिक अजीब क्यों है।
निकोडेमस 13

5

निरुपित पूर्णांक सीएलएस के अनुरूप नहीं होते हैं क्योंकि वे कुछ भाषाओं के बीच अंतर करने योग्य नहीं होते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.