विंडोज 8 WinRT का परिचय देता है, जो .NET जैसा है लेकिन अप्रबंधित है। यह अप्रबंधित क्यों है? क्या यह प्रदर्शन का मुद्दा है? क्या इसका मतलब है कि कचरा संग्रह निचले स्तर के एपीआई के लिए उपयुक्त नहीं है?
विंडोज 8 WinRT का परिचय देता है, जो .NET जैसा है लेकिन अप्रबंधित है। यह अप्रबंधित क्यों है? क्या यह प्रदर्शन का मुद्दा है? क्या इसका मतलब है कि कचरा संग्रह निचले स्तर के एपीआई के लिए उपयुक्त नहीं है?
जवाबों:
WinRT, सदियों पुरानी C- आधारित Winapi का प्रतिस्थापन है । यह एक एपि है जो कई रनटाइम वातावरण में प्रयोग करने योग्य होनी चाहिए। 20 साल पहले, एक सी आपी को अपेक्षाकृत आसान था। यह तब से आगे बढ़ गया है, COM 1990 के दशक के अंतिम भाग में सार्वभौमिक गोंद बन गया। Windows में आम उपयोग में व्यावहारिक रूप से कोई भी भाषा रनटाइम COM का समर्थन करता है।
एक कचरा संग्रहकर्ता एक भाषा रनटाइम कार्यान्वयन विवरण है। .NET के लिए कलेक्टर उदाहरण के लिए जावास्क्रिप्ट के लिए कलेक्टर से बहुत अलग है। या तो बनाई गई देशी वस्तुओं को कलेक्टर के बहुत सख्त नियमों का पालन करना चाहिए। बदले में इसका मतलब है कि उन्हें WinRT संस्करण बनाने होंगे जो प्रत्येक भाषा रनटाइम के लिए विशिष्ट हों। ऐसा नहीं होगा, यहां तक कि एक कंपनी जितनी बड़ी Microsoft हर भाषा बाइंडिंग के लिए एक विशिष्ट WinRT संस्करण बनाने और समर्थन करने का जोखिम नहीं उठा सकती है। न ही यह आवश्यक है, यह देखते हुए कि ये भाषाएँ पहले से ही COM का समर्थन करती हैं।
अभी, WinRT के लिए सबसे अच्छा बाध्यकारी C ++ है क्योंकि COM स्पष्ट मेमोरी प्रबंधन के साथ अधिक कुशलता से काम करता है। नए C ++ कंपाइलर एक्सटेंशन की पर्याप्त मदद से जो इसे स्वचालित बनाता है, इसे बचने के लिए C ++ / CLI जैसे सिंटैक्स के साथ पुराने के _com_ptr_t के समान है। प्रबंधित भाषाओं में बाइंडिंग अपेक्षाकृत सरल है क्योंकि CLR में पहले से ही उत्कृष्ट COM इंटरॉप सपोर्ट है। WinRT ने .NET के मेटाडेटा प्रारूप को भी अपनाया। Afaik, आज तक प्रबंधित कंपाइलरों पर कोई काम नहीं किया गया है।
संपादित करें: Microsoft प्रोग्रामर और ब्लॉगर लैरी ओस्टरमैन ने अब नष्ट किए गए उत्तर में एक अच्छी टिप्पणी छोड़ दी। इसे संरक्षित करने के लिए मैं इसे यहाँ उद्धृत करूँगा:
WinRT अप्रबंधित है क्योंकि OS अप्रबंधित है। और WinRT को जिस तरह से डिजाइन किया गया था, उसे तैयार करके, यह केवल C ++, C # और JS ही नहीं, बल्कि कई अलग-अलग भाषाओं में व्यक्त होने की क्षमता हासिल करता है। उदाहरण के लिए, मैं आसानी से पर्ल मॉड्यूल का एक सेट देख सकता हूं जो कि WinRT API को लागू करता है जो डेस्कटॉप पर काम करता है। अगर हमने इसे .Net में लागू किया होता, तो यह बेहद मुश्किल होता
IInspectable
आप क्वेरी जैसी वस्तु को उसके वास्तविक वर्ग प्रकार या सभी समर्थित इंटरफेस की सूची के लिए कर सकते हैं, और winmd फाइलों के साथ कोई भी उस सभी के लिए WinRT मेटाडेटा को प्रतिबिंबित कर सकता है। )। और winmd फ़ाइलें तुरंत इंटरॉप असेंबलियों के रूप में उपयोग करने योग्य नहीं हैं, सीएलआर को उन्हें विशेष रूप से संभालना है।
WinRT अप्रबंधित है क्योंकि यह Win32 के लिए प्रतिस्थापन होने का इरादा है - विंडोज के लिए निम्नतम स्तर डेवलपर सुलभ API। एक अप्रबंधित एपीआई अभी भी सबसे संभावित रूप से निष्पादित एक है जो डेवलपर के सामने आ सकता है और तर्क यह जाता है कि इसके ऊपर प्रबंधित एपीआई को लपेटना हमेशा संभव होगा, जो कि वास्तव में 'अनुमान' करते हैं।
इसका यह भी अर्थ है कि C ++ डेवलपर्स उन हुप्स के माध्यम से कूदने के बिना WinRT का उपयोग कर सकते हैं जो C ++ / CLI परिचय ( http://www2.research.att.com/~bs/bs_faq.html#CppCLI देखें ) का यह अर्थ है कि यद्यपि आप अभी भी हैं। यदि आपको WinRT का उपयोग करना है तो COM का अध्ययन करें।
असली सवाल यह है कि 'COM आवश्यक क्यों है? Microsoft को इसका आविष्कार क्यों करना पड़ा? ' क्योंकि COM की सभी अतिरिक्त सुविधाओं के बिना सादे C ++ वास्तविक OOP काम के लिए अपर्याप्त है और C ++ के Stroustrup के दावे आपको 'पोर्टेबिलिटी' प्रदान करते हैं, जो कार्य वास्तविकता की रोशनी में बहुत ही असंगत हैं। Http://webmechs.com/webpress/2011/11/c-versus-objective-c-as-ap-substate/ देखें