क्यों WinRT अप्रबंधित है? [बन्द है]


164

विंडोज 8 WinRT का परिचय देता है, जो .NET जैसा है लेकिन अप्रबंधित है। यह अप्रबंधित क्यों है? क्या यह प्रदर्शन का मुद्दा है? क्या इसका मतलब है कि कचरा संग्रह निचले स्तर के एपीआई के लिए उपयुक्त नहीं है?


56
यह एक बुरा कॉल था , जितना बुरा इसे बंद करना। अब आप संदर्भ और स्रोतों पर जोर देते हैं, तो आप प्रश्न को बंद करके पहले ही काट देते हैं। अब आपने उस प्रोग्रामर से उत्कृष्ट स्रोतों को हटा दिया , जिसने इस पर काम किया था।
हंस पैसेंट

9
मैंने इस विषय के रूप में मतदान किया क्योंकि यह एक व्यावहारिक प्रोग्रामिंग प्रश्न नहीं है। यह सिर्फ जिज्ञासा है। कोई भी प्रोग्रामर इस प्रश्न के परिणामस्वरूप अपना कोड बदलने वाला नहीं है।
रेमंड चेन

17
@Kev उस तर्क से, "पृथ्वी ग्रह कैसे बना?" विज्ञान समुदाय में बिल्कुल भयानक था क्योंकि इसने बहुत सारी धार्मिक अटकलों को आकर्षित किया। इस प्रश्न के अच्छे उत्तर हैं - सिर्फ इसलिए कि यह बहुत सारे बुरे उत्तरों को आकर्षित करता है इसका मतलब यह नहीं है कि यह एक बुरा प्रश्न है। हालांकि वास्तव में, इस सवाल को पी.एस.ई.
री मियाँसाक

22
@casperOne यह बहुत सारे डेवलपर्स के लिए एक वैध "व्हाइटबोर्ड" प्रश्न है - हम निर्णय के लिए संभवतः तकनीकी कारणों को जानना चाहते हैं, ताकि हम उसी तर्क को कहीं और लागू कर सकें। क्या ऐसा इसलिए है क्योंकि कचरा इकट्ठा करने वाले को प्रोफाइल करना मुश्किल है? क्या यह इसलिए है क्योंकि यह निचले स्तर के हार्डवेयर सार तक आसान पहुँच देता है? यदि कोई तकनीकी कारण नहीं हैं, तो यह केवल दुर्भाग्यपूर्ण है - लेकिन इसका सवाल की गुणवत्ता से कोई लेना-देना नहीं है।
री मियासाका

7
मैं सहमत हूँ, @ हंसपसंद के साथ; इस प्रश्न को फिर से खोलने और मान्य मानने की आवश्यकता है। "यह अप्रबंधित क्यों है?" WinRT के मूल सिद्धांतों के संबंध में एक बहुत अच्छा सवाल है।
रोब पर्किंस

जवाबों:


190

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 में लागू किया होता, तो यह बेहद मुश्किल होता


14
मैं संकलक के बारे में नहीं जानता, लेकिन मुझे पूरा यकीन है कि WinRT .NET प्रोजेक्शन में CLR पर बहुत काम किया गया था। उन्होंने COM इंटरॉप कोड का पुन: उपयोग किया हो सकता है, लेकिन इसमें अंतर भी हैं (उदाहरण के लिए, IInspectableआप क्वेरी जैसी वस्तु को उसके वास्तविक वर्ग प्रकार या सभी समर्थित इंटरफेस की सूची के लिए कर सकते हैं, और winmd फाइलों के साथ कोई भी उस सभी के लिए WinRT मेटाडेटा को प्रतिबिंबित कर सकता है। )। और winmd फ़ाइलें तुरंत इंटरॉप असेंबलियों के रूप में उपयोग करने योग्य नहीं हैं, सीएलआर को उन्हें विशेष रूप से संभालना है।
पावेल मिनाएव

5
यकीन नहीं होता, आप हाथी को नजरअंदाज कर रहे हैं। IInspectable IDispatch के लिए एक प्रतिस्थापन है जो 1997 में फंस गया। आप Microsoft के लिए काम करते हैं, यहाँ कुछ रहस्य दूर करने के लिए स्वतंत्र महसूस करते हैं :)
हंस पैसेंट

13
भाषा अनुमानों का समर्थन करने के लिए सभी 3 भाषाओं में काम किया गया था।
रीनटोमोनिका लैरी ओस्टरमैन

14
मेरा दावा है कि अभी 'WinRT के लिए सबसे अच्छा बंधन' वास्तव में C # है। CLR बाइंडिंग को बहुत तेज़ COM इंटरॉप से ​​परे भी ऑप्टिमाइज़ किया गया है, और dev प्रीव्यू में .NET लैंग्वेज पहले से ही 'वेट' के साथ सर्वव्यापी async फ़ंक्शंस के लिए उत्कृष्ट समर्थन को लागू करते हैं। कुछ डेमो में C # कोड ने C ++ नमूनों की तुलना में बहुत अधिक किया, और अधिक आसानी से काम किया। हो सकता है कि बाद में C ++ को एक async सहायक एक्सटेंशन मिलेगा, लेकिन इस संस्करण में C ++ async भयानक लग रहा था। और आपको चक्र-समस्याग्रस्त C ++ कार्यान्वयन की तुलना में CLR एकत्र करने वाले कचरे से दीर्घकालिक स्मृति को लीक करने की संभावना कम है। सी # FTW!
शासन

13
@ हंस: तीसरा प्रक्षेपण सभी सीएलआर भाषाओं (मुख्य रूप से सी # और वीबी) के लिए सीएलआर है। इसके अलावा WinJS एक प्रक्षेपण नहीं है, यह समर्थन पुस्तकालयों का एक सेट है। प्रक्षेपण सीधे चक्र JS इंजन में बनाया गया है।
ReinstateMonica लैरी ओस्टरमैन

25

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/ देखें


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