विंडोज 8 रनटाइम (WinRT / विंडोज स्टोर ऐप्स / विंडोज 10 यूनिवर्सल ऐप) की तुलना सिल्वरलाइट और WPF से कैसे की जाती है? [बन्द है]


353

मैं अपने सिर को नए विंडोज 8 रनटाइम को प्राप्त करने की कोशिश कर रहा हूं जो मेट्रो शैली के एप्लिकेशन बनाने के लिए उपयोग किया जाता है । मुझे पता है कि आप इसे XAML के साथ उपयोग कर सकते हैं और यह .NET पर आधारित है। इसलिए C # और VB.NET का उपयोग ऐप्स को लिखने के लिए किया जा सकता है, लेकिन फिर यह HTML, CSS, DOM और JavaScript के साथ कुछ करने लगता है।

क्या कोई समझा सकता है कि यह कुछ पैराग्राफ में क्या है, जो कि .NET UI प्रोग्रामर समझ सकता है? (मुझे कुछ "कुंजी" याद आ रही है जिसे समझना आवश्यक है।)


हम सभी जानते हैं कि WPF, Silverlight , Windows Forms इत्यादि कम से कम इंटेल सिस्टम पर विंडोज 8 (और विंडोज 10) के तहत काम करते रहेंगे, इसलिए कृपया मुझे यह न बताएं ...


22
यह .NET पर आधारित नहीं है, केवल इसके संपर्क में है (COM इंटरॉप की तरह थोड़ा, लेकिन बहुत अधिक सहज ... जैसे कोई इंटरॉप असेंबली)।
पावेल मिनेव

क्या आप WinRT को प्लेटफ़ॉर्म (ABI, ऑब्जेक्ट मॉडल, आदि) के रूप में पूछ रहे हैं - किस स्थिति में यह COM या .NET से तुलना करने के लिए अधिक समझ में आता है - या UI के लिए सहित WinRT मानक वर्ग के पुस्तकालयों के बारे में?
पावेल मिनेव

1
ध्यान दें कि आपको अंतर्निहित तकनीक, ऑब्जेक्ट मॉडल आदि को अलग करना चाहिए - उदाहरण के लिए COM - और उस तकनीक का उपयोग करके लागू विशिष्ट लाइब्रेरी। उत्तरार्द्ध के मामले में भी, सभी मानक पुस्तकालय यूआई लाइब्रेरी नहीं हैं - यदि आप वीएस में ऑब्जेक्ट ब्राउज़र में देखते हैं, तो आप उन विशेषताओं की चौड़ाई देख सकते हैं जो Windows.*नाम स्थान को कवर करते हैं। शब्दावली अब तक यहाँ कुछ भ्रामक है, क्योंकि WinRT प्रौद्योगिकी और मानक पुस्तकालयों के पूरे सेट को संदर्भित करता है। मुझे नहीं लगता कि सिर्फ यूआई लाइब्रेरी ( Windows.UI.*) के लिए कोई संक्षिप्त लेबल है ।
पावेल मिनेव

@TrueWill: यह तीनों को सीखने के लिए अधिक समझ में आता है, ताकि आपका ज्ञान अधिक अच्छी तरह से गोल हो जाए, और इसलिए आप यह तय कर सकते हैं कि किसी समस्या के लिए कौन सा समाधान सबसे अच्छा है। बस तीन में से एक मत सीखो।
क्रिस चारबारुक

2
@TrueWill: सिल्वरलाइट का भविष्य में कोई रिलीज नहीं होगा: zdnet.com/blog/microsoft/microsoft-releases-silverlight-5/…
Sabuncu

जवाबों:


479

निम्नतम स्तर पर, WinRT ABI स्तर पर परिभाषित एक वस्तु मॉडल है। यह COM को आधार के रूप में उपयोग करता है (इसलिए हर WinRT ऑब्जेक्ट IUnknownइम्प्लीमेंट करता है और रीफोकाउंटिंग करता है), और वहां से बनाता है। यह पुराने के COM की तुलना में काफी नई अवधारणाएं जोड़ता है, जिनमें से अधिकांश सीधे .NET से आते हैं - उदाहरण के लिए, WinRT ऑब्जेक्ट मॉडल में डेलिगेट्स हैं, और ईवेंट .NET.- स्टाइल (डेलिगेट्स के साथ और सब्सक्राइबर जोड़ने / हटाने) किए जाते हैं ईवेंट स्रोतों के पुराने COM मॉडल और सिंक के बजाय विधियाँ, प्रति घटना)। अन्य उल्लेखनीय चीजों में से, WinRT में पैराट्राइज्ड ("जेनेरिक") इंटरफेस भी हैं।

एक अन्य बड़ा बदलाव यह है कि सभी WinRT घटकों के लिए मेटाडेटा उपलब्ध है, जैसे .NET असेंबली। COM में आपको थोड़े थोड़े टाइप करने वाले के साथ था, लेकिन हर COM घटक के पास नहीं था। WinRT के लिए, मेटाडेटा .winmd फ़ाइलों में समाहित है - डेवलपर पूर्वावलोकन में "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows मेटाडेटा \" देखें। यदि आप चारों ओर प्रहार करते हैं, तो आप देखेंगे कि वे वास्तव में सीएलआई असेंबलियाँ हैं जिनमें कोई कोड नहीं है, बस मेटाडेटा टेबल हैं। आप उन्हें ILDASM के साथ खोल सकते हैं, वास्तव में। ध्यान दें, इसका मतलब यह नहीं है कि WinRT को स्वयं प्रबंधित किया जाता है - यह फ़ाइल प्रारूप को पुन: उपयोग करता है।

फिर उस ऑब्जेक्ट मॉडल के संदर्भ में कई पुस्तकालय कार्यान्वित किए जाते हैं - WinRT इंटरफेस और कक्षाओं को परिभाषित करना। फिर से, "विंडोज मेटाडेटा" फ़ोल्डर को ऊपर देखें जो कि वहां है; या वी.एस. में ऑब्जेक्ट ब्राउज़र को आग लगा दें और फ्रेमवर्क चयनकर्ता में "विंडोज 8.0" का चयन करें, यह देखने के लिए कि क्या कवर किया गया है। वहाँ बहुत कुछ है, और यह अकेले यूआई के साथ सौदा नहीं करता है - आपको नामस्थान भी मिलते हैं जैसे Windows.Data.Json, या Windows.Graphics.Printing, या Windows.Networking.Sockets

फिर आपको कई पुस्तकालय मिलते हैं, जो विशेष रूप से यूआई के साथ काम कर रहे हैं - ज्यादातर ये विभिन्न नामस्थान के तहत Windows.UIया होंगे Windows.UI.Xaml। उनमें से बहुत सारे WPF / सिल्वरलाइट नामस्थानों के समान हैं - जैसे Windows.UI.Xaml.Controlsबारीकी से मेल खाना System.Windows.Controls; Windows.UI.Xaml.Documentsआदि के लिए डिट्टो

अब, .NET के पास सीधे WinRT घटकों को संदर्भित करने की क्षमता है जैसे कि वे .NET असेंबली थे। यह COM इंटरॉप से ​​अलग तरीके से काम करता है - आपको किसी भी मध्यवर्ती कलाकृतियों जैसे कि इंटरॉप असेंबली, आपको सिर्फ /r.winmd फ़ाइल की आवश्यकता नहीं है, और इसके मेटाडेटा में सभी प्रकार और उनके सदस्य आपके लिए दृश्यमान हो जाते हैं जैसे कि वे .NET ऑब्जेक्ट थे। ध्यान दें कि WinRT पुस्तकालय स्वयं पूरी तरह से मूल (और इसलिए मूल C ++ प्रोग्राम है जो WinRT का उपयोग करते हैं, CLR की आवश्यकता बिल्कुल नहीं होती है) - प्रबंधित किए गए सभी सामानों को उजागर करने का जादू सीएलआर के अंदर ही है, और काफी निम्न स्तर है। यदि आप एक। NET प्रोग्राम का उपयोग करते हैं, जो .winmd का संदर्भ देता है, तो आप देखेंगे कि यह वास्तव में एक बाहरी असेंबली संदर्भ की तरह दिखता है - वहाँ पर हाथ से छेड़छाड़ करने वालों की कोई नींद नहीं है, जैसे कि वहाँ एम्बेडिंग।

यह एक कुंद मानचित्रण नहीं है, या तो - CLR WinRT प्रकारों को उनके समकक्षों के अनुकूल बनाने की कोशिश करता है, जहां संभव हो। इसलिए जैसे GUID, दिनांक और URI क्रमशः बनते हैं System.Guid, System.DateTimeऔर System.Uri; WinRT संग्रह इंटरफेस जैसे कि IIterable<T>और IVector<T>बन IEnumerable<T>और IList<T>; और इसी तरह। यह दोनों तरीके से जाता है - यदि आपके पास .NET ऑब्जेक्ट है जो लागू करता है IEnumerable<T>, और इसे वापस WinRT में पास करता है, तो यह इसे देखेगा IIterable<T>

अंततः, इसका मतलब यह है कि आपके .NET मेट्रो ऐप्स को मौजूदा मानक .NET पुस्तकालयों के सबसेट तक पहुँच मिलती है, और (देशी) WinRT लाइब्रेरीज़ को भी, जिनमें से कुछ - विशेष रूप से Windows.UI- सिल्वरलाइट, एपीआई-वार के समान दिखती हैं। आपके पास अभी भी अपने UI को परिभाषित करने के लिए XAML है, और आप अभी भी उसी मूल अवधारणाओं से निपटते हैं जैसे कि Silverlight - डेटा बाइंडिंग, संसाधन, शैली, टेम्पलेट आदि। कई मामलों में, usingनए नामस्थानों द्वारा बस एक Silverlight ऐप को पोर्ट करना संभव है , और एपीआई कोड समायोजित किया गया था, जहां कोड में कुछ स्थानों tweaking।

WinRT का स्वयं HTML और CSS से कोई लेना-देना नहीं है, और यह केवल जावास्क्रिप्ट के संबंध में इस अर्थ में है कि यह वहाँ भी उजागर है, यह .NET के लिए कैसे किया जाता है। जब आप अपने .NET मेट्रो ऐप में WinRT UI पुस्तकालयों का उपयोग करते हैं, तो आपको HTML / CSS / JS से निपटने की आवश्यकता नहीं है (ठीक है, मुझे लगता है, यदि आप वास्तव में चाहते हैं, तो आप एक WebViewनियंत्रण की मेजबानी कर सकते हैं ...)। आपके सभी .NET और सिल्वरलाइट स्किल इस प्रोग्रामिंग मॉडल में बहुत अधिक प्रासंगिक हैं।


WPF-WinRT संगतता के बारे में क्या? क्या WPF- सिल्वरलाइट में विसंगतियां होंगी?
डेन

5
@Den WPF यहां तुलना का एक अच्छा आधार बिंदु नहीं है - एपीआई ज्यादा है, सिल्वरलाइट के बहुत करीब है। यदि आप इसे इस तरह से देखते हैं, तो दोनों के बीच असंगतताएं हैं, लेकिन स्केल डेस्कटॉप बनाम WP7 सिल्वरलाइट के करीब है, सिल्वरलाइट बनाम WPF नहीं।
पावेल मिनेव

11
बहुत बढ़िया जवाब। क्या WinRT सीधे NT कर्नेल का उपयोग करता है (जब उसे OS समर्थन की आवश्यकता होती है) या Win32 के माध्यम से जाता है?
तिमोर


66

से बिल्ड मुख्य वक्ता के रूप:

मुख्य स्टैक

वे HTML / CSS / JavaScript ऐप्स और C # / XAML ऐप दोनों को सामान्य API प्रदान कर रहे हैं। C # और XAML का उपयोग किया जाएगा, लेकिन यह WPF या सिल्वरलाइट नहीं होगा।


8
यह थोड़ा और अधिक शामिल है, क्योंकि नई XAML चीज C # और (देशी) C ++ दोनों के लिए उपलब्ध है। यह न तो WPF और न ही सिल्वरलाइट है, लेकिन बाद के बहुत करीब है - जैसा कि मुख्य वक्ता के रूप में दिखाया गया है, आप अक्सर चांदी के कोड में केवल usings और इस तरह के अन्य तुच्छ रिफ्लेक्टरिंग के एक गुच्छा को बदलने के साथ दूर हो सकते हैं। WPF / सिल्वरलाइट के पीछे मुख्य विचार - घोषणात्मक मार्कअप, संसाधन, शैली, टेम्पलेट, डेटा बाइंडिंग आदि - सभी हैं। अधिकांश नियंत्रण भी हैं।
पावेल मिनाएव

2
वहाँ एक बेहतर ग्राफिक है जो मैंने आज सुबह देखा था, लेकिन मैं अभी इसे फिर से नहीं ढूँढ सकता। संपादित करें: इस प्रश्न पर एक और उत्तर के लिए धन्यवाद। dougseven.files.wordpress.com/2011/09/win8-new-platform.png
क्रिस चाराबरुक

1
WPF स्लाइड पर कहाँ फिट होता है?
पापाराज़ो

1
यह नीचे दाईं ओर .NET / Silverlight तरीके से एक साथ समूहीकृत है।
BoltClock

1
वह तस्वीर पूरी तरह से गलत है, जहां तक ​​मौजूदा टुकड़े का संबंध है। आप "Win32 kernel32.dll" और "Win32" के साथ "Win32 user32.dll + gdi32.dll" के साथ "विंडोज कर्नेल सर्विसेज" को बदलकर लगभग इसे ठीक कर सकते हैं ... लेकिन IE और .NET / सिल्वरलाइट को ज्यादातर शीर्ष पर रखना चाहिए। user32.dll + gdi32.dll की, और साथ ही C / C ++ / Java / Delphi / आदि भी कर्नेल32.dll तक पहुँचते हैं। क्या महत्वपूर्ण है कि user32.dll और gdi32.dll WinRT को कम न करें, और विंडोज स्टोर ऐप्स सीधे WinRT तक kern32.dll की पूर्ण शक्ति तक नहीं पहुंच सकते हैं।
बेन वोयगेट

37

मुख्य विचार यह है कि अब दो विकास ट्रैक हैं - डेस्कटॉप और मेट्रो।

  • डेस्कटॉप वह जगह है जहां पुराने ऐप्स रहते हैं।
  • नए एप्लिकेशन, मेट्रो एप्लिकेशन, VB.NET, C # या C ++ सहित कई तरीकों से बनाए जा सकते हैं। ये तीन भाषा विकल्प UI के निर्माण के लिए XAML का उपयोग कर सकते हैं। विकल्प यूआई और एप्लिकेशन कोड दोनों के विकास के लिए जावास्क्रिप्ट / एचटीएमएल 5 / सीएसएस का उपयोग करना है।

कुछ महत्वपूर्ण बिंदु:

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

2
मेट्रो में, अति-स्तरीय विंडो नहीं होती हैं। अभी भी Popup( msdn.microsoft.com/en-us/library/windows/apps/… ) है, इसलिए यदि आप चाहें, तो आप कुछ एमडीआई-जैसे बना सकते हैं। गैर-स्पर्श-अनुकूल UI के साथ समाप्त होने के बाद से स्पष्ट रूप से इसका दुरुपयोग करने की अनुशंसा नहीं की जाती है।
पावेल मिनेव

@Pavel - यह दिलचस्प है - क्या इसका मतलब है कि आपके पास शीर्ष स्तर की कुछ जोड़ी हो सकती हैं, जो साइड से चल रही हैं, लेकिन ओवरलैपिंग नहीं? उदाहरण के लिए टाइल की गई ... उदाहरण के लिए प्रत्येक स्क्रीन को आधा साझा करना? अब मैं जिस WPF ऐप पर काम कर रहा हूं, उसे इस प्रकार की कार्यक्षमता की आवश्यकता है।
डोडी_कोडर

3
प्रत्येक मेट्रो ऐप में केवल एक शीर्ष-स्तरीय विंडो होती है। आपके पास अगल-बगल में दो मेट्रो ऐप हो सकते हैं, लेकिन यह कुछ ऐसा है जो उपयोगकर्ता तय करता है - ऐप के लिए इस कॉन्फ़िगरेशन में खुद को मजबूर करने का कोई तरीका नहीं है। इसके अलावा, यहां तक ​​कि अगर आपके पास दो ऐप्स अगल-बगल चल रहे हैं, तो वे समन्वय करने के लिए संवाद नहीं कर सकते हैं (स्पष्ट उपयोगकर्ता इशारों जैसे "शेयर टू") को छोड़कर।
पावेल मिनेव

1
दूसरी ओर, आप, निश्चित रूप से, अपनी एकल शीर्ष-स्तरीय विंडो को जितने चाहें उतने क्षेत्रों में उपविभाजित कर सकते हैं, और उन्हें आकार देने के लिए एक जंगम विभक्त प्रदान कर सकते हैं - जो, उपयोगकर्ता के दृष्टिकोण से, दो टाइल वाले शीर्ष स्तर की खिड़कियों की तरह दिखेगा। । वे अभी भी ऐप स्विचर में एक ही चीज़ के रूप में दिखेंगे, हालाँकि (लेकिन तब आप शायद यही चाहते होंगे?)।
पावेल मिनाएव

3
मार्टीन लवेल के अनुसार, इसके लिए कोई जानबूझकर तंत्र नहीं है, और इसके लिए इस्तेमाल किए जाने वाले कुछ जानबूझकर प्रतिबंधित हैं। नामांकित पाइप वहाँ नहीं हैं, उदाहरण के लिए, और न ही मेमोरी मैप की गई फ़ाइलें हैं। सॉकेट्स (सर्वर सॉकेट सहित) हैं, लेकिन कनेक्ट करते समय localhost, आप केवल एक ही ऐप से कनेक्ट कर सकते हैं। आप साझा किए गए "ज्ञात फ़ोल्डर" (दस्तावेज़, चित्र आदि) में से एक में सामान्य फ़ाइलों का उपयोग कर सकते हैं, लेकिन यह एक काफी कच्चा हैक है जो मतदान की आवश्यकता है और उपयोगकर्ता को दिखाई देता है।
पावेल मिनाएव

24

आर्किटेक्चर का संशोधित संस्करण है जो निश्चित रूप से आपको यह समझने में मदद करेगा कि वास्तव में चीजें कहां हैं। Telerik ninjas में से एक ने CLR टीम के साथ बातचीत की और तस्वीर को संशोधित किया:

विंडोज 8 प्लेटफॉर्म और टूल (सीएलआर सहित)

यहां आप देख सकते हैं कि सीएलआर कहां खड़ा है। .NET फ्रेमवर्क में अब दो प्रोफाइल हैं

1- .NET मेट्रो प्रोफाइल (सीएलआर जो मेट्रो आवेदन के साथ सौदा करता है)

2- .NET क्लाइंट प्रोफाइल (C # और VB.NET एप्लिकेशन के लिए CLR रनटाइम)

मुझे उम्मीद है कि यह आपको एक स्पष्ट तस्वीर देगा। एक बुरी तस्वीर में पूरा लेख पढ़ें एक हजार लंबी चर्चा के लायक है।


17

यहाँ Microsoft से विस्तार के बहुत सारे ।

Windows रनटाइम API मेटाडेटा (.winmd फ़ाइलों) का उपयोग कर उजागर किया जाता है। यह .NET फ्रेमवर्क (Ecma-335) द्वारा उपयोग किया जाने वाला एक ही प्रारूप है। अंतर्निहित बाइनरी अनुबंध आपके लिए अपनी पसंद के विकास की भाषा में सीधे विंडोज रनटाइम एपीआई तक पहुंचना आसान बनाता है। विंडोज रनटाइम एपीआई की आकृति और संरचना दोनों स्थिर भाषाओं जैसे कि सी # और गतिशील भाषाओं जैसे जावास्क्रिप्ट द्वारा समझी जा सकती है। IntelliSense जावास्क्रिप्ट, सी #, विजुअल बेसिक और सी ++ में उपलब्ध है।

संक्षेप में, विंडोज रनटाइम विंडोज कार्यक्षमता को उजागर करने वाले जावास्क्रिप्ट का एक नया सेट है और जावास्क्रिप्ट / सी # / वीबी / सी ++ के लिए उपलब्ध है। प्रत्येक भाषा को समझने के लिए बनाया गया है और कुछ थरथराने वाली परत के माध्यम से जाने के बजाय उन्हें सीधे कॉल करने में सक्षम है।

सिल्वरलाइट और WPF XAML के फ्लेवर हैं जो CLR पर चलते हैं। अन्य कार्यक्षमता के बीच, विंडोज रनटाइम, एक्सएएमएल के एक संस्करण को सिल्वरलाइट के समान उजागर करता है, लेकिन ऐसा मूल तरीके से करता है, सीएलआर के माध्यम से नहीं। इसे सीएलआर से, लेकिन सी ++ से भी एक्सेस किया जा सकता है।


2
"थंकिंग परत" मौजूद हो सकती है - जैसे सीएलआर वास्तव में आरसीडब्ल्यू का उपयोग करता है - लेकिन यह अब एक कार्यान्वयन विवरण है। देव परिप्रेक्ष्य से, आप सीधे WinRT .winmd फ़ाइलों का संदर्भ लेते हैं, और सीधे अंदर के प्रकारों के साथ काम करते हैं।
पावेल मिनेव

3
जबकि थंकिंग परत RCWs का उपयोग करती है, विंडोज़ रनटाइम के लिए RCW पुराने P / Invoke RCWs की तुलना में अधिक हल्के होते हैं।
लैरी ओस्टरमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.