2009-10-26 16 views
21

के बीच अंतर मैंने सी # 4.0 की नई सुविधाओं के बारे में अनगिनत ब्लॉग, पोस्ट और स्टैक ओवरफ्लो प्रश्न पढ़े हैं। खुले में भी नई डब्ल्यूपीएफ 4.0 फीचर्स आनी शुरू हो गई हैं। जो मुझे नहीं मिला और मुझे यह जानना अच्छा लगेगा:सीएलआर 2.0 और सीएलआर 4.0

  1. सी #/डब्ल्यूपीएफ डेवलपर परिप्रेक्ष्य से सीएलआर 4.0 में बड़े बदलाव क्या हैं?
  2. सीएलआर 4.0 में बड़े बदलाव क्या हैं?

मुझे लगता है कि आंतरिक रूप से, अधिकांश परिवर्तन नई गतिशील भाषाओं और समांतर प्रोग्रामिंग के लिए हैं। लेकिन क्या कोई अन्य प्रमुख सुधार है? क्योंकि भाषा में सुधार सिर्फ भाषा सुधार है। आपको बस नए कंपाइलर की आवश्यकता है और उन सुविधाओं का उपयोग संस्करण 1.0/1.1 के अलावा, नेट के निचले संस्करण के साथ किया जा सकता है (कम से कम उनमें से अधिकतर का उपयोग किया जा सकता है)।

और यदि उपर्युक्त विशेषताएं केवल एक ही हैं, तो केवल इन सुविधाओं के लिए संस्करण 4.0 में बदल दिया गया है, जो मुझे लगता है 4.0 .NET 4.0 संस्करण (यानी 1.0/1.1 के बाद, 2.0 & 3.0/3.5)। क्या संस्करण वृद्धि उचित है?

संपादित:

के रूप में पावेल Minaev टिप्पणी में कहा, यहां तक ​​कि उन दो सुविधाओं CLR स्वतंत्र हैं। 3.0 और 3.5 में गति और अन्य सुधार भी थे। तो संस्करण वृद्धि क्यों?

+1

न तो गतिशील भाषा समर्थन समानांतर प्रोग्रामिंग नहीं सीएलआर द्वारा सीधे समर्थित है। डायनामिक भाषाएं डीएलआर द्वारा समर्थित हैं, जो सीएलआर के शीर्ष पर बनाई गई है (और इसके लिए विशिष्ट कुछ भी उपयोग नहीं करती है, और 2.0 पर ठीक चल सकती है)। समांतर एफएक्स सिर्फ एक पुस्तकालय है। –

उत्तर

11

एक नई सीएलआर चीज जो मुझे पता है, NoPIA support के लिए इंटरफेस, structs और प्रतिनिधियों के लिए संरचनात्मक टाइपिंग का एक रूप है - मूल रूप से, यह रनटाइम को अलग-अलग परिभाषाओं के साथ विशिष्ट प्रकारों का इलाज करने देता है जैसे कि वे समान थे - तो अगर दो असेंबली A और B प्रत्येक में एक COM-imported इंटरफ़ेस IFoo है, जिसमें एक ही आईआईडी और एक ही सदस्य के साथ घोषित किया गया है, रनटाइम उन्हें समकक्ष प्रकार के रूप में व्यवहार करेगा; इसलिए यदि कोई उदाहरण Foo[A]IFoo लागू करने का उदाहरण है, तो आप इसे [B]IFoo पर डाल सकते हैं, और कलाकार काम करेगा।

एक और चीज एक ही प्रक्रिया में कई सीएलआर संस्करणों को साइड-बाय-साइड होस्ट करने की क्षमता है। आप एक प्रक्रिया में 1.x और 2.0 होस्ट नहीं कर सकते हैं, उदाहरण के लिए, लेकिन आप 2.0 और 4.0 होस्ट कर सकते हैं। इसके लिए मुख्य लाभ एक साथ सीएलआर संस्करण के लिए लिखे गए प्लगइन लोड करने की क्षमता है।

एक मामूली बिट यह है कि StackOverflowException जैसे कुछ और अपवाद अचूक हो गए हैं - उदाहरण के लिए आप AccessViolationException नहीं पकड़ सकते हैं।

इसके अलावा, here पीडीसी 2008 से सीएलआर 4.0 पर एक पावरपॉइंट प्रेजेंटेशन है। यह अब थोड़ा सा हो सकता है, लेकिन अधिकांश सामानों का उल्लेख बीटा में होता है।

+0

@ पावेल, आप 4 में अब उन अपवादों को क्यों नहीं पकड़ सकते? क्या वे अप्रचलित हैं? –

+0

उन्हें जानबूझकर अनचाहे बनाया गया था, क्योंकि उन्हें पकड़ने के लिए कोई वैध कारण नहीं है। 'StackOverflowException' के लिए, ऐसा इसलिए है क्योंकि यह एक ऐसी स्थिति है जिसमें कोई भी त्रुटि-हैंडलिंग कोड अधिक करने में सक्षम नहीं होगा, वैसे भी (यदि आप ढेर से बाहर हैं, तो आप एक विधि कॉल भी नहीं कर सकते ...)। 'AccessViolationException' के लिए, ऐसा इसलिए है क्योंकि यह अपनी प्रकृति nondeterministic द्वारा है - एक ऑपरेशन जिसके कारण कोई भी कुछ असंबद्ध स्मृति क्षेत्र को पढ़ सकता है (या फिर भी बदतर, लिख सकता है); इसलिए इसे पकड़ना हमेशा एक डिजाइन समस्या है। –

+2

'AccessViolationException' अप्राप्य हो सकता है क्योंकि कोड एक्सेस सुरक्षा को बहिष्कृत कर दिया गया है, जो उस अपवाद को हटा देता है: http://www.infoq.com/news/2010/01/CAS-.NET-4.0। यह कभी भी nondeterministic नहीं रहा है, निश्चित रूप से उन क्षेत्रों में नहीं जहां आप विदेशी कोड चलाने की अनुमति देना चाहते हैं। – Abel

2

मुझे विश्वास नहीं है कि कोई नया आईएल निर्देश हैं। नए सीएलआर में इनलाइनिंग और कचरा संग्रह जैसी चीजों में सुधार है जो 2.0 सीएलआर के समान काम करता है, लेकिन बेहतर है। एक वर्चुअल मशीन (जैसे सीएलआर या जेवीएम) कई संभावित कार्यान्वयन के साथ एक सार अवधारणा है। मेरा मानना ​​है कि सीएलआर 4.0 सीएलआर 2.0 में एक ही सार मशीन है, बस एक बेहतर कार्यान्वयन के साथ।

यहां तक ​​कि नए गतिशील सामान नए एपीआई के साथ सिर्फ एक संकलक चाल है (Java where it's being proposed as a new opcode में विपरीत।)

अगर मैं इस बारे में गलत हूँ, मुझे पता है हमें प्रसन्नता होगी!

+0

एक (107) होना चाहिए, प्रतिबिंब उस पर अपवाद फेंकता रहता है :) – leppie

4

इसमें बड़ी संख्या में बदलाव हैं।

सीएलआर में ही कुछ बदलाव हैं। कचरा कलेक्टर को वर्कस्टेशन मोड में gen0/1 और gen2 के समवर्ती संग्रह का समर्थन करने के लिए बदला जा रहा है। साथ ही, सुरक्षा में लागू होने के तरीके में कुछ बदलाव हैं। समानांतर रूपरेखा कुछ सीएलआर के थ्रेडपूल के कार्यान्वयन को बदलती है (जो पूरी तरह से प्रबंधित नहीं होती है, लेकिन रनटाइम का हिस्सा स्वयं)। इसके अलावा, टाइप सिस्टम में कुछ बदलाव हैं, जो ज्यादातर नए पीआईए COM समर्थन से संबंधित हैं।

सीएलआर परिवर्तनों की बजाय सबसे बड़ा परिवर्तन शायद अधिक लाइब्रेरी/ढांचे में बदलाव हैं। जैसे कि ढांचे में डीएलआर का एकीकरण, और नया गतिशील प्रकार। ढांचे के संदर्भ में, आपके पास प्रतिक्रियाशील ढांचे, समांतर लाइब्रेरी एक्सटेंशन, कोड अनुबंध, ट्यूपल समर्थन, और बहुत से छोटे बदलाव (यानी: Enum.TryParse, Lazy<T>, और अन्य छोटे, लेकिन अच्छे, सुधार) हैं।

+3

'गतिशील' एक सी # आर्टिफैक्ट है, और यह सीएलआर प्रकार नहीं है। और क्या आप "सीएलआर में डीएलआर का एकीकरण" करते हैं? डीएलआर वास्तव में सिर्फ एक पुस्तकालय है। –

+0

सच है, मैं अपना जवाब संपादित कर सकता हूं। –

+0

संपादित। इनमें से कुछ को विशिष्ट परिवर्तन की आवश्यकता है, हालांकि। –

0

मैं वहाँ नए नीचे कुछ भी के तहत अगर देखने के लिए परावर्तक में नए सी # सामान में से कुछ को देख करने की कोशिश की:

  • गतिशील प्रकार, वस्तु रों में अनुवाद कर रहे हैं संकलक जादू है, जो कहते हैं के माध्यम से रनटाइम बाइंडिंग को संभालने के लिए लाइब्रेरी कॉल।
  • वैकल्पिक पैरामीटर कंपाइलर के माध्यम से संभाले जाते हैं। यदि आप एक्स के लिए मान निर्दिष्ट किए बिना Foo (int x = 5) कहते हैं, तो आपको प्रतिबिंबक में Foo (5) के रूप में कॉल दिखाई देगा।

तो मुझे लगता है कि परिवर्तन कुछ भी नहीं हैं जो आप आसानी से खोज सकते हैं (जैसे सीएलआर 2.0 में सामान्य समर्थन)।

+1

मैंने डायनामिक प्रकारों की कोशिश नहीं की, लेकिन वैकल्पिक पैरामीटर भी नेट 2.0 के साथ ठीक काम करते हैं। केवल एक चीज जो आपको चाहिए वह वीएस -2010 सी # कंपाइलर है। शायद गतिशील भी काम कर सकते हैं। हालांकि यकीन नहीं है। – Yogesh

+0

नहीं, 'गतिशील' को डीएलआर की आवश्यकता है, साथ ही इसके लिए सी # बाइंडर 'माइक्रोसॉफ्ट .CSharp' में है। वे केवल 4.0 में आते हैं। –

+1

असेंबली केवल .NET 4.0 में आती हैं, लेकिन यह है। आपको बस कंपाइलर, असेंबली और सिद्धांत में आवश्यकता है, आप इसे सीएलआर 2.0 पर चलाने में सक्षम होना चाहिए। –

1

सीएलआर में कई कोर इंटरफ़ेस और प्रतिनिधि प्रकार generic covariance and contravariance के समर्थन में अपडेट किए गए हैं। उदाहरण के लिए, IEnumerable<T> को IEnumerable<out T> में बदल दिया गया है।

+1

यह सीएलआर नहीं है (सामान्य भाषा __Runtime__), यह बीसीएल (बेस क्लास लाइब्रेरी) है। सीएलआर वीएम है। –

+0

पर्याप्त मेला। सीएलआर में एक नई सुविधा का लाभ उठाने के लिए सामान्य इंटरफेस में परिवर्तन बीसीएल अपडेट थे। –

+0

जेनेरिक सह- और contravariance .NET 2.0 में जोड़े गए थे और उन भाषाओं में उपलब्ध हैं जो तब से समर्थन करते हैं (उदा। एफिल.नेट)। यह वीईएस और न ही सीएलआर में एक नई सुविधा नहीं है, यह पूरी तरह से एक सी # सुविधा है। यदि बीसीएल सी # के बजाय एफिल में लिखा गया था, तो उन भिन्न एनोटेशन को साल पहले जोड़ा जा सकता था। (वास्तव में, वे अभी एक बाइटकोड पोस्ट-प्रोसेसिंग चरण या उसके जैसा कुछ जोड़ा जा सकता था।) –

2

प्रत्येक रिलीज प्रलेखन टीमों के लिए "नया क्या है" दस्तावेज़ बनाते हैं। यहाँ What's New in Visual C# 2010

और .NET फ्रेमवर्क 4.0 Beta2 के लिए एक है:

यहाँ सी # 4.0 Beta2 के लिए एक है What's New in the .NET Framework Version 4

इन परिवर्तनों को आप पा सकते हैं का सबसे पूरी सूची है।

संबंधित मुद्दे