मोनो का उपयोग अक्सर "हां, .NET क्रॉस-प्लेटफॉर्म" कहने के लिए किया जाता है। वह दावा कितना वैध है? [बन्द है]


168

में क्या आप समय में इस बिंदु पर नेट और जावा के बीच अपनी परियोजना के लिए किसे चुनेंगे? मैं कहता हूं कि मैं "क्या आप हमेशा विंडोज पर तैनात रहेंगे?" एक नए वेब प्रोजेक्ट में सामने आने के लिए सबसे महत्वपूर्ण तकनीकी निर्णय, और यदि उत्तर "नहीं" है, तो मैं .NET के बजाय जावा की सिफारिश करूंगा।

एक बहुत ही सामान्य प्रतिवाद यह है कि "यदि हम कभी लिनक्स / ओएस एक्स / जो भी चलाना चाहते हैं, हम सिर्फ मोनो चलाएंगे" 1 , जो सतह पर एक बहुत ही आकर्षक तर्क है, लेकिन मैं कई के लिए सहमत नहीं हूं कारणों।

  • OpenJDK और सभी वेंडर ने JVM की आपूर्ति की, आधिकारिक Sun TCK ने चीजों को सही ढंग से काम करना सुनिश्चित किया। मुझे मोनो के माइक्रोसॉफ्ट टीसीके पास होने की जानकारी नहीं है।
  • मोनो .नेट रिलीज़ को ट्रेल करता है। वर्तमान में पूरी तरह से समर्थित .NET-level क्या है?
  • क्या सभी GUI तत्व (WinForms?) मोनो में सही तरीके से काम करते हैं?
  • व्यवसायी ओपन सोर्स फ्रेमवर्क पर निर्भर नहीं होना चाह सकते हैं क्योंकि आधिकारिक योजना बी।

मुझे पता है कि Oracle द्वारा जावा के नए शासन के साथ, भविष्य असुरक्षित है, लेकिन उदाहरण के लिए आईबीएम लिनक्स सहित JDK के कई प्लेटफार्मों के लिए प्रदान करता है । वे सिर्फ खुले खट्टे नहीं हैं।

तो, किन परिस्थितियों में .NET अनुप्रयोगों के लिए मोनो एक वैध व्यावसायिक रणनीति है?


1 मार्क एच ने इसे संक्षेप में प्रस्तुत किया : "यदि दावा है कि " मेरे पास .NET में लिखित एक विंडोज़ अनुप्रयोग है, तो इसे मोनो पर चलना चाहिए " , तो नहीं, यह एक वैध दावा नहीं है - लेकिन मोनो ने ऐसे अनुप्रयोगों को पोर्ट करने के प्रयास किए हैं सरल होते हैं। "



24
बस स्पष्ट होना चाहिए, .NET Microsoft CLI का कार्यान्वयन है। मोनो एक सीएलआई कार्यान्वयन है जिसमें नोवेल लीड ले रहा है।
ChaosPandion

यह अपने आप में एक प्रश्न के बजाय पिछले प्रश्न के उत्तर की तरह बहुत अधिक लगता है। मेरा सुझाव है कि आप अपने प्रश्न को संपादित करने पर विचार करें, ताकि यह अपने आप अधिक खड़ा हो सके।
वाल्टर

2
@walter, पूरे बिंदु यह है कि मैं सामान्य रूप से जानता हूं "java .NET से अधिक क्रॉस-प्लेटफॉर्म है", और मैं उन्हें उत्तर देने के लिए सूचीबद्ध करता हूं ताकि सर्वोत्तम संभव जवाबी तर्क शामिल हो सकें।

1
यह प्रश्न के लिए ऑफ टॉपिक है। एक बिजनेस प्लानिंग साइट पर जाएं और देखें कि किसी व्यवसाय के लिए वास्तव में क्या महत्वपूर्ण है, इसके लिए कुछ नमूना योजनाएं ब्राउज़ करें ... टेक एक्स बनाम टेक वाई डिलीवरी वैन के लिए फेड बनाम डिबेटिंग फोर्ड बनाम जीएम के रूप में महत्वपूर्ण है।
लाल-गंदगी

जवाबों:


194

स्पार्की का जवाब मिला, मुझे थोड़ा पूरक करना चाहिए।

".NET क्रॉस प्लेटफॉर्म है" बहुत अधिक अस्पष्ट कथन के रूप में है, क्योंकि यह मूल रूप से निर्मित और विकसित दोनों दुनिया के लिए बदल गया है और विकसित हुआ है।

संक्षिप्त उत्तर है:

अंतर्निहित इंजन जो .NET और उसके डेरिवेटिव, कॉमन लैंग्वेज इन्फ्रास्ट्रक्चर स्टैंडर्ड को पावर करता है, क्रॉस-प्लेटफॉर्म है और जैसे कि आप अपने कोड को कई प्लेटफ़ॉर्म पर जाना चाहते हैं, आपको डिलीवरी करने के लिए सही प्लेटफ़ॉर्म पर सही एपीआई का उपयोग करने की योजना बनाने की आवश्यकता है प्रत्येक मंच पर सबसे अच्छा अनुभव।

सीएलआई परिवार ने "राइट वन्स, रन एनीव्हेयर" दृष्टिकोण की कोशिश नहीं की है, क्योंकि फोन से मेनफ्रेम तक के अंतर बहुत बड़े हैं। एपीआई और रनटाइम सुविधाओं के एक ब्रह्मांड के बजाय जो प्लेटफ़ॉर्म-विशिष्ट हैं, डेवलपर्स को प्रत्येक प्लेटफ़ॉर्म में महान अनुभव बनाने के लिए सही उपकरण देने के लिए उभरा है ।

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

Microsoft का .NET फ्रेमवर्क उत्पाद क्रॉस प्लेटफॉर्म नहीं है, यह केवल विंडोज पर चलता है। Microsoft से .NET फ्रेमवर्क की विविधताएँ हैं जो अन्य प्रणालियों जैसे विंडोज फोन 7, एक्सबॉक्स 360 और सिल्वरलाइट के माध्यम से ब्राउज़रों पर चलती हैं, लेकिन वे सभी थोड़े अलग प्रोफाइल हैं।

आज आप प्रत्येक प्रमुख मुख्यधारा के ओएस, फोन, मोबाइल डिवाइस, एम्बेडेड सिस्टम और सर्वर को .NET-आधारित तकनीकों के साथ लक्षित कर सकते हैं। यहां एक सूची दी गई है जो दिखाती है कि आप प्रत्येक मामले में किस CLI कार्यान्वयन का उपयोग करेंगे (यह सूची व्यापक नहीं है, लेकिन 99% मामलों को कवर करना चाहिए:

  • x86 और x86-64 आधारित पीसी कंप्यूटर:
    • रनिंग विंडोज -> आमतौर पर आप .NET या सिल्वरलाइट चलाते हैं लेकिन आप यहां पूर्ण मोनो का भी उपयोग कर सकते हैं।
    • लिनक्स, बीएसडी या सोलारिस -> आप पूर्ण मोनो या सिल्वरलाइट चलाते हैं
    • MacOS X चलाना -> आप पूर्ण मोनो या सिल्वरलाइट चलाते हैं
    • Android चलाना -> आप मोनो / Android सबसेट चलाते हैं
  • एआरएम कंप्यूटर:
    • विंडोज फोन 7 चलाना: आप कॉम्पैक्ट फ्रेमवर्क 2010 चलाते हैं
    • विंडोज 6.5 और पुराने को चलाना: आप पुराने कॉम्पैक्ट फ्रेमवर्क को चलाते हैं
    • Android डिवाइस: आप मोनो / Android चलाते हैं
  • PowerPC कंप्यूटर:
    • आप पूर्ण लिनक्स, बीएसडी या यूनिक्स ऑपरेटिंग सिस्टम के लिए पूर्ण मोनो चलाते हैं
    • आप PS3, Wii या अन्य एम्बेडेड सिस्टम के लिए एम्बेडेड मोनो चलाते हैं।
    • XBox360 पर, आप CompactFramework चलाते हैं
  • S390, S390x, Itanium, SPARC कंप्यूटर:
    • आप पूरा मोनो चलाते हैं
  • अन्य एम्बेडेड ऑपरेटिंग सिस्टम:
    • आप मोबाइल प्रोफ़ाइल के साथ .NET MicroFramework या मोनो चलाते हैं।

आपकी आवश्यकताओं के आधार पर उपरोक्त पर्याप्त हो सकता है या नहीं। आपको हर जगह चलाने के लिए समान स्रोत कोड शायद ही मिलेगा। उदाहरण के लिए, XNA कोड हर डेस्कटॉप पर नहीं चलता है, जबकि .NET डेस्कटॉप सॉफ्टवेयर XNA या फोन पर नहीं चलता। आपको .NET फ्रेमवर्क के अन्य प्रोफाइल में चलने के लिए आमतौर पर अपने कोड में परिवर्तन करने की आवश्यकता होती है। यहाँ कुछ ऐसे प्रोफाइल हैं जिनसे मैं अवगत हूँ:

  • .NET 4.0 प्रोफ़ाइल
  • सिल्वरलाइट प्रोफाइल
  • विंडोज फोन 7 प्रोफाइल
  • XBox360 प्रोफ़ाइल
  • मोनो कोर प्रोफाइल - .NET प्रोफाइल का अनुसरण करता है और लिनक्स, मैकओएस एक्स, सोलारिस, विंडोज और बीएसडी पर उपलब्ध है।
  • .NET माइक्रो फ्रेमवर्क
  • IPhone प्रोफाइल पर मोनो
  • Android प्रोफ़ाइल पर मोनो
  • PS3 प्रोफ़ाइल पर मोनो
  • Wii प्रोफ़ाइल पर मोनो
  • चांदनी प्रोफ़ाइल (सिल्वरलाइट के साथ संगत)
  • चांदनी विस्तारित प्रोफ़ाइल (सिल्वरलाइट + पूर्ण .NET 4 एपीआई एक्सेस)

इसलिए उन प्रोफाइलों में से प्रत्येक वास्तव में थोड़ा अलग है, और यह कोई बुरी बात नहीं है। प्रत्येक प्रोफ़ाइल को इसके होस्ट प्लेटफ़ॉर्म पर फिट करने के लिए डिज़ाइन किया गया है और समझ में आने वाले एपीआई को उजागर करता है, और उन लोगों को हटा देता है जो समझ में नहीं आते हैं।

उदाहरण के लिए, होस्ट ब्राउज़र को नियंत्रित करने के लिए सिल्वरलाइट का एपीआई फोन पर कोई मतलब नहीं रखता है। और XNA में शेड्स पीसी हार्डवेयर पर कोई मतलब नहीं रखते हैं जो इसके लिए समतुल्य समर्थन का अभाव है।

जितनी जल्दी आपको पता चलता है कि .NET हार्डवेयर और देशी प्लेटफॉर्म की अंतर्निहित क्षमताओं से डेवलपर को अलग करने का एक समाधान नहीं है, तो आप बेहतर होंगे।

कहा कि शुरू, कुछ एपीआई और ढेर कई प्लेटफार्मों में उपलब्ध हैं, उदाहरण के लिए ASP.NET का उपयोग विंडोज पर, लिनक्स पर, सोलारिस पर, MacOS X पर किया जा सकता है क्योंकि उन एपीआई में .NET और मोनो दोनों मौजूद हैं। ASP.NET Microsoft के कुछ समर्थित प्लेटफ़ॉर्म जैसे XBox या Windows Phone 7 पर उपलब्ध नहीं है और अन्य प्लेटफार्मों पर भी समर्थित नहीं है जो मोनो Wii या iPhone की तरह समर्थन करता है।

निम्नलिखित जानकारी केवल 21 नवंबर तक सही है, और मोनो दुनिया में कई चीजों की संभावना बदल जाएगी।

समान सिद्धांतों को अन्य स्टैक पर लागू किया जा सकता है, पूरी सूची के लिए एक उचित तालिका की आवश्यकता होगी, जिसके बारे में मुझे पता नहीं है कि यहां कैसे प्रस्तुत किया जाए, लेकिन यहां उन तकनीकों की एक सूची है जो किसी विशेष प्लेटफॉर्म पर मौजूद नहीं हो सकती हैं। आप यह मान सकते हैं कि यहाँ सूचीबद्ध कोई भी चीज़ उपलब्ध नहीं है (बेझिझक मुझे उन चीजों के लिए संपादन भेजने के लिए स्वतंत्र महसूस करें):

कोर रनटाइम इंजन [हर जगह]

  • Reflection.Emit समर्थन [हर जगह, WP7, CF, Xbox, MonoTouch, PS3 को छोड़कर]
  • सीपीयू SIMD समर्थन [लिनक्स, बीएसडी, सोलारिस, मैकओएस एक्स; जल्द ही PS3, MonoTouch और MonoDroid]
  • निरंतरता - मोनो टैस्कलेट्स [लिनक्स, बीएसडी, सोलारिस, मैकओएस, PS3, Wii]
  • असेंबली अनलोडिंग [केवल Windows]
  • वीएम इंजेक्शन [लिनक्स, बीएसडी, मैकओएस एक्स, सोलारिस]
  • DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
  • जेनरिक [PS3 और iPhone पर कुछ सीमाएँ]।

बोली

  • C # 4 [हर जगह]
  • सी # कंपाइलर एक सेवा के रूप में (लिनक्स, मैकओएस, सोलारिस, बीएसडी, एंड्रॉइड)
  • IronRuby [हर जगह, WP7 निष्पादित करें, CF, Xbox, मोनोआच, PS3]
  • IronPython [हर जगह, WP7 को निष्पादित करें, CF, Xbox, MonoTouch, PS3]
  • F # [हर जगह, WP7 निष्पादित करें, CF, Xbox, MonoTouch, PS3]

सर्वर स्टाॅक

  • ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
  • ADO.NET [हर जगह]
  • LINQ to SQL [सर्वत्र]
  • इकाई फ्रेमवर्क [हर जगह]
  • कोर XML स्टैक [हर जगह]
    • XML क्रमांकन [हर जगह, WP7, CF, Xbox को छोड़कर)
  • LINQ to XML (हर जगह)
  • System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
  • System.Messaging [विंडोज; Linux, MacOS और Solaris को RabbitMQ की आवश्यकता है]
  • .NET 1 एंटरप्राइज़ सेवाएँ [केवल Windows]
  • WCF [विंडोज पर पूरा; सिल्वरलाइट, सोलारिस, मैकओएस, लिनक्स, मोनो टच, मोनोक्रॉइड पर छोटे उपसमुच्चय]
  • विंडोज वर्कफ़्लो [विंडोज़ केवल]
  • कार्डस्पेस पहचान [विंडोज केवल]

जीयूआई का ढेर

  • सिल्वरलाइट (विंडोज, मैक, लिनक्स - मूनलाइट के साथ)
  • WPF (केवल Windows)
  • Gtk # (विंडोज, मैक, लिनक्स, बीएसडी)
  • Windows.orm (विंडोज, मैक, लिनक्स, बीएसडी)
  • मोनोमैक - नेटिव मैक इंटीग्रेशन (केवल मैक)
  • मोनो टच - नेटिव आईफोन इंटीग्रेशन (केवल आईफोन / आईपैड)
  • MonoDroid - देशी Android एकीकरण (केवल Android)
  • मीडिया सेंटर एपीआई - केवल विंडोज
  • अव्यवस्था (विंडोज और लिनक्स)

ग्राफिक लाइब्रेरी

  • GDI + (Windows, Linux, BSD, MacOS)
  • क्वार्ट्ज (MacOS X, iPhone, iPad)
  • काहिरा (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS X, PS3, Wii)

मोनो लाइब्रेरीज़ - क्रॉस प्लेटफ़ॉर्म, .NET में उपयोग किया जा सकता है, लेकिन मैन्युअल रूप से निर्माण की आवश्यकता होती है

  • सी # 4 एक सेवा के रूप में संकलक
  • सेसिल - CIL मैनीपुलेशन, वर्कफ़्लो, CIL का इंस्ट्रूमेंटेशन, लिंकर्स
  • रिलैक्सएनजी लाइब्रेरीज़
  • Mono.Data। * डेटाबेस प्रदाता
  • पूर्ण System.Xaml (सेटअप में उपयोग के लिए जहां .NET स्टैक की पेशकश नहीं करता है)

MonoTouch का मतलब है iPhone पर चलने वाला मोनो; मोनोऑइड का मतलब है मोनो एंड्रॉइड पर चल रहा है; PS3 और Wii बंदरगाहों केवल सोनी और निनटेंडो योग्य डेवलपर्स के लिए उपलब्ध है।

मैं औपचारिकता की कमी के लिए माफी मांगता हूं।


2
आईबीएम, यदि आप इसे पढ़ते हैं, तो मैं AIX (या यहां तक ​​कि एएस / 400) को मिगुएल सूची में होना चाहूंगा !!

4
एक निश्चित, आधिकारिक (सपा?) उत्तर के लिए धन्यवाद!

10
हम जानते हैं कि आईबीएम ने मोनो से एआईएक्स के कम से कम दो पोर्ट किए हैं, लेकिन जिन टीमों ने पोर्ट किया था, उन्हें परिवर्तनों को वापस करने की अनुमति नहीं थी।
मिगेल.डे.काजा

3
+1 - इस आदमी को मोनो प्रोजेक्ट पर काम करना चाहिए! कृपया चारा न लें;)
जेएफओ

1
@ जेफ़ो: यह लड़का मोनो का निर्माता है ;-)
seoul

114

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

मुझे पता नहीं है कि क्या Microsoft के पास यह पुष्टि करने के लिए कोई उपकरण है कि एक कार्यान्वयन अनुरूप है, लेकिन यदि वे ऐसा करते हैं, तो मुझे पूरा यकीन है कि मोनो लोगों के पास है, और इसका उपयोग करें।

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

.NET में कई टूल और एक्सटेंशन हैं, उदाहरण के लिए, कोड कॉन्ट्रैक्ट्स। ये हमेशा मोनो में पूरी तरह से लागू नहीं होते हैं। (वर्तमान में, मुझे लगता है कि अनुबंधों की आवश्यकता के लिए एक आंशिक अनुबंध सत्यापनकर्ता है)। इनका उपयोग आमतौर पर .NET ऐप्स में वैसे भी नहीं किया जाता है, लेकिन अगर उनकी लोकप्रियता बढ़ती है, तो वे जिस दर पर मोनो में लागू होते हैं।

WinForms (पूरी तरह से) पोर्टेबल नहीं हैं। वे एक .NET विशिष्ट हैं और CLI का हिस्सा नहीं हैं। CLI किसी विशेष विजेट सेट को निर्दिष्ट नहीं करता है। हालांकि (जीटीके # और सिल्वरलाइट) क्रॉस प्लेटफॉर्म विजेट सेट हैं। यदि आप पोर्टेबिलिटी को ध्यान में रखते हुए ग्राउंड से एप्लिकेशन लिख रहे हैं, तो आप इनमे से किसी एक का उपयोग विनफॉर्म / डब्ल्यूपीएफ के बजाय करेंगे। इसके अलावा, मोनो Winforms API के लिए एक पतली आवरण प्रदान करता है - जो मौजूदा winforms ऐप्स को GTK # (पूरे पुनर्लेखन के बिना) में अधिक आसानी से पोर्ट करने में सक्षम बनाता है।

मोनो एक उपकरण प्रदान करता है, मोनो माइग्रेशन एनालाइज़र (एमओएमए), जो एक मौजूदा .Net अनुप्रयोग ले सकता है और आपको पोर्टेबिलिटी के बारे में बताता है। (उदाहरण के लिए, उपयोग किए जाने वाले पुस्तकालयों, पी / इनवॉइस आदि की पहचान करें)।

ऐसे व्यवसायों के लिए जो ओपन सोर्स पर निर्भर नहीं होना चाहते - मोनो को फिर से लाइसेंस दिया जा सकता है। मोनो में जोड़े गए कोड का स्वामित्व नोवेल को सौंप दिया जाता है, जो इसे सामान्य एलजीपीएल लाइसेंस के अलावा अन्य वैकल्पिक तरीकों से लाइसेंस दे सकते हैं (जिसमें वैसे भी बहुत कम प्रतिबंध हैं)।

तो जैसा कि दावे के लिए ".NET पोर्टेबल है", मुझे लगता है कि यह एक मान्य दावा हो सकता है यदि आप जमीन से कोड लिख रहे हैं और फ्रेमवर्क के साथ पोर्टेबिलिटी के मुद्दों के बारे में जानते हैं। यदि दावा है कि "मेरे पास .NET में लिखा एक विंडोज़ एप्लीकेशन है, तो इसे मोनो पर चलना चाहिए", तो नहीं, यह एक वैध दावा नहीं है - लेकिन मोनो ने ऐसे अनुप्रयोगों को सरल बनाने के प्रयास किए हैं।


20
अंतिम पैराग्राफ के लिए +1।
डेवि 8

4
the C# language is an open standard, and is not strictly tied to .NET.और C# 4.0 code (current .NET version)विरोधाभासी हैं
Jader Dias

9
आपका अंतिम बिंदु एक अच्छा है, और समान रूप से जावा पर लागू होता है। सिर्फ इसलिए कि आपने जावा में अपने ऐप को कोड कर दिया है, इसका मतलब यह नहीं है कि यह जावा को सपोर्ट करने वाले हर प्लेटफॉर्म पर अपने आप पोर्टेबल हो जाता है। विशेष रूप से अधिक जटिल परियोजनाओं के लिए, आपको लगता है कि कई जावा अनुप्रयोगों में प्लेटफ़ॉर्म-विशिष्ट कोड है।
डीन हार्डिंग

5
@ user8057: विनफॉर्म 100% लागू है? गंभीरता से? RichTextBox घटक देखें। ट्री घटक पर ड्रैग और ड्रॉप फंक्शनलिटी देखें। दूसरी ओर स्विंग 100% क्रॉस-प्लेटफ़ॉर्म है, हालांकि इसका मतलब सभी प्लेटफार्मों पर चूसना हो सकता है।
डैन रोसेनस्टार्क

2
@ यार: LOL "के लिए, जिसका मतलब है कि सभी प्लेटफार्मों पर चूसने का मतलब हो सकता है" :-)
जादूगर

14

बिन्दुवार:

  • OpenJDK और सभी वेंडर ने JVM की आपूर्ति की, आधिकारिक Sun TCK ने चीजों को सही ढंग से काम करना सुनिश्चित किया। मुझे मोनो के माइक्रोसॉफ्ट टीसीके पास होने की जानकारी नहीं है।
    एक विनिर्देश है जो Microsoft CLR के अनुरूप है। मोनो माइक्रोसॉफ्ट के सीएलआर का क्लोन नहीं है, बल्कि उसी विनिर्देशन का कार्यान्वयन है। एक ओर, वहाँ मौका है कि यह और भी अधिक असंगति में परिणाम है। व्यवहार में, इसने मोनो के लिए बहुत अच्छा काम किया है।
  • मोनो .नेट रिलीज़ को ट्रेल करता है। वर्तमान में पूरी तरह से समर्थित .NET-level क्या है?
    क्योंकि .Net के लिए प्रलेखन वास्तविक रिलीज़ से पहले है, मोनो वास्तव में आधिकारिक Microsoft रिलीज़ से पहले .Net 4 के लिए (बीटा रिलीज़ नहीं) समर्थन पूरा कर चुका था । इसके अतिरिक्त, मोनो उन चीजों का दस्तावेजीकरण करने का एक बहुत अच्छा काम करता है जो चीजें समर्थित नहीं हैं, और उनके पास कुछ उपकरण हैं जो आप मौजूदा परियोजना के खिलाफ चला सकते हैं ताकि आप असंगति के लिए संभावित स्थानों के साथ स्पॉट कर सकें।
  • क्या सभी GUI तत्व (WinForms?) मोनो में सही तरीके से काम करते हैं?
    Winforms के विशाल बहुमत ठीक काम करता है। WPF, इतना नहीं। मैंने सुना है कि जावा के लिए भी यही सच है - कई उन्नत विजेट / गुई टूलकिट सभी प्लेटफार्मों पर समर्थित नहीं हैं।
  • व्यवसायी आधिकारिक योजना के रूप में ओपन सोर्स फ्रेमवर्क पर निर्भर नहीं होना चाह सकते हैं।
    यदि ऐसा है, तो वे निश्चित रूप से जावा के साथ नहीं जा रहे हैं, तो, जैसा कि योजना ए में एक खुला स्रोत फ्रेमवर्क भी ऊपर रखता है।

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

दूसरी ओर, यदि आप आप आज एक Windows एप्लिकेशन बनाने आपको लगता है कि देख रहे हैं हो सकता है भविष्य में किसी अज्ञात बिंदु पर क्रॉस प्लेटफॉर्म होने की जरूरत है, तो आप शायद देशी विंडोज विजेट और उपकरणों के साथ जाना चाहते हैं। जावा की तुलना में .Net यहां बहुत बेहतर काम करता है और मोनो इस परिदृश्य में पूरी तरह से स्वीकार्य गिरावट है।

दूसरे शब्दों में: यदि आपके प्रश्न के लिए हर तरह से क्रॉस-प्लेटफॉर्म है तो हाँ। नेट। नहीं, मोनो केवल हर .Net प्रोग्राम को बॉक्स से बाहर नहीं चलाएगा, लेकिन आपका प्रश्न एक नई परियोजना के संदर्भ में है। यह नई परियोजनाओं को परेशानी से बाहर रखने और अनुकूलता के मुद्दों से बचने के लिए बहुत काम नहीं करता है, खासकर यदि आप .Net के लिए विकसित करने की तुलना में मोनो के विकास के संदर्भ में सोचते हैं।

हालांकि, ज्यादातर, मुझे लगता है कि यह पहली जगह में गलत सवाल है। जब तक आप स्क्रैच से एक नई विकास टीम का निर्माण नहीं कर रहे हैं, आप प्रोग्रामर के साथ शुरू कर रहे हैं जिनके पास एक क्षेत्र या किसी अन्य में विशेषज्ञता है। आपके प्रोग्रामर को जो पहले से पता है, उसके साथ जाकर आपके सर्वोत्तम परिणाम प्राप्त होंगे। जैसा कि एक क्रॉस-प्लेटफ़ॉर्म ऐप बनाने के लिए महत्वपूर्ण हो सकता है, यदि आपके पास। जावा प्रोग्रामर से भरा एक टीम है, जिसमें थोड़ा जावा अनुभव है, तो आप उन्हें आग लगाने या अपने अगले प्रोजेक्ट के लिए सभी जावा सीखने की संभावना नहीं रखते हैं। यदि आपके पास जावा प्रोग्रामर से भरी टीम है, तो आप उन्हें सीखने के लिए नहीं कहेंगे। केवल विंडोज प्रोजेक्ट के लिए .Net या तो वे पागल होंगे।


बस "ओपन सोर्स" मुद्दे को स्पष्ट करने के लिए: मैं एक ओपन सोर्स प्रोजेक्ट के बारे में सोच रहा था, जो कि एक सुयोग्य व्यवसाय इकाई द्वारा समर्थित नहीं है, न कि एक GPL'ed स्रोत कोड वाले व्यवसाय के रूप में।

3
नोवेल "एक उपयुक्त व्यवसाय इकाई" नहीं है?
13

@svick - मुझे नहीं लगता कि "सुबल" टाइपो है। वह इस परियोजना के पीछे के कानूनी मुद्दों के बारे में चिंतित है।
जोएल कोएहॉर्न

@ थोरबज व्यावसायिक दृष्टिकोण से, जेसीपी की तरह एक अमूर्त इकाई नोवेल की तरह एक मजबूत सहायक इकाई होना बेहतर है।
जोएल कोएहॉर्न

@ user8057 आह, मैंने वह शब्द कभी नहीं सुना है। यह एक अजीब टाइपो की तरह लग रहा था।
svick

11

मैंने मोनो के साथ काम किया है, और मैं कहूंगा कि यह उतना ही अच्छा है जितना आप एक वैकल्पिक प्लेटफॉर्म के साथ प्राप्त कर सकते हैं जो ओपन-सोर्स है, और सीधे Microsoft द्वारा समर्थित नहीं है। यदि आप क्लोजर या स्काला जैसे वैकल्पिक ओपन-सोर्स प्लेटफॉर्म का उपयोग करके सहज हो सकते हैं, तो आप शायद मोनो का उपयोग करने के साथ सहज हो सकते हैं।

मोनो द्वारा समर्थित .NET का स्तर हमेशा मोनो रोडमैप पेज पर पाया जा सकता है ।

क्या सभी GUI तत्व काम करते हैं? जहाँ तक मुझे पता है, वे करते हैं, हालाँकि मैंने हर तत्व को नहीं आज़माया है।

क्या मोनो .NET के समान है? नहीं, मुझे संदेह है कि यहां और वहां मामूली (और शायद प्रमुख) ट्वीक की आवश्यकता होगी। आप वर्तमान में, इसके साथ इकाई फ्रेमवर्क नहीं चला सकते, उदाहरण के लिए।


बेशक मोनो एक सटीक क्लोन नहीं है, लेकिन मैंने जो देखा है, वह नई परियोजनाओं की शुरुआत करते समय बहुत व्यवहार्य विकल्प है।
चोसपंडियन 17

क्या आप में चरित्र pic me3i है? 美国 से?
जादेर डायस

1
@ जैडर, पूरी तरह से असंबंधित - लेकिन वह सुंदर और when के लिए चीनी चरित्र है (जब संयुक्त का मतलब अमेरिका है, तो सचमुच सुंदर देश का मतलब है)
aggietech

AFAIK क्लजुरे और स्काला भाषाएं हैं न कि प्लेटफॉर्म। और (फिर से AFAIK) स्काला को किसी भी JVM कार्यान्वयन पर चलना चाहिए जिस पर जावा चल सकता है।
जियोर्जियो

9

लक्ष्य के रूप में, .NET / मोनो ब्रह्मांड बहुत तेज़ चलता है

हर कुछ वर्षों में, Microsoft .NET के आसपास की भाषा, रनटाइम और बुनियादी ढांचे के बारे में कुछ आकर्षक बदलाव और नवाचारों के साथ सामने आता है। उदाहरण के लिए: जेनरिक, LINQ, DLR, एंटिटी फ्रेमवर्क - विजुअल स्टूडियो के हर नए संशोधन के साथ, आमतौर पर फीचर सेट में एक बहुत महत्वपूर्ण वृद्धि होती है और इसके द्वारा लक्षित फ्रेमवर्क की उपयोगिता होती है।

जबकि फ्रेमवर्क में निरंतर सुधार का स्वागत है, यदि आप कई प्लेटफार्मों में संगतता चाहते हैं तो यह भी समस्याग्रस्त है। Red Hat Enterprise Linux जैसे दीर्घकालिक-समर्थन प्लेटफ़ॉर्म नई तकनीक को अपनाने के संबंध में बहुत धीमी गति से चलते हैं, और किसी भी बिंदु पर, मोनो प्लेटफ़ॉर्म में महत्वपूर्ण सुधार होने जा रहे हैं जो पिछले कुछ महीनों के भीतर ही हुए हैं। इसलिए यदि आप उन सामानों को चलाना चाहते हैं जो शांत बच्चे बना रहे हैं, तो आपको मोनो को खरोंच से संकलित करना होगा और अपने स्वयं के पैच और अपडेट का प्रबंधन करना होगा। यह ठीक नहीं है।

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


मजेदार है कि आप फोरट्रान का उल्लेख करते हैं, क्योंकि यह निरंतरता और परलैज़ेटियन और ओओपी सिद्धांतों पर जोर देने के साथ लगातार विकसित हो रहा है। तो हाँ फोरट्रान 77 स्थिर है, लेकिन जब से फोरट्रान 90 बाहर आया है, प्रत्येक संशोधन बेहतर और बेहतर हो जाता है। फोरट्रान 2008 एक आधुनिक भाषा "लगभग" है।
ja72

4
मैं कहता हूँ कि .Net / C # 1.0 सबसे खराब जावा क्लोन था, लेकिन .Net 2.0 द्वारा दोनों प्लेटफार्मों के बीच बहुत अच्छी सुविधा समानता थी। वहाँ से .net 3.5 / C # 3 पर जा रहे हैं, Microsoft के प्लेटफ़ॉर्म ने अधिकांश क्षेत्रों में जावा को अच्छी तरह से पीछे छोड़ दिया है और यह नए प्रकारों के साथ गतिशील टाइपिंग और आगामी सुविधाओं जैसे async संगामिति के साथ लगातार बढ़त हासिल कर रहा है। उस ने कहा, एक बड़ा कारण। नेट इतनी तेजी से आगे बढ़ने में सक्षम है कि जावा द्वारा निशान छोड़ दिया गया है। यदि ओरेकल जावा को आगे बढ़ाना चाहता है तो वे माइक्रोसॉफ्ट द्वारा छोड़े गए समान निशान का जल्दी से पालन करने में सक्षम होंगे।
जोएल कोएहॉर्न

".NET / मोनो ब्रह्मांड बहुत तेज चलता है"। विडंबना यह है कि हम मोनो का उपयोग नहीं करने का मुख्य कारण यह है कि इसका जीसी विकास तेजी से धीमा रहा है। उन्होंने 2003 में वर्तमान स्थिर जीसी को "अंतरिम उपाय" के रूप में वर्णित किया! lists.ximian.com/pipermail/mono-gc-list/2003-August/000012.html
जॉन

या आप बस डेबियन / उबंटू चला सकते हैं, कुछ बाहरी एपेट रिपॉजिटरी का उपयोग कर सकते हैं, और स्क्रू के साथ मोनो को संकलित किए बिना शांत बच्चों के साथ खेल सकते हैं।
Quandary

7

एक उपयोगकर्ता के नजरिए से, मोनो लिनक्स के साथ विंडोज .NET ऐप्स को बनाने में बेकार है। यदि आप वास्तव में मोनो में किसी भी शालीनता से लिखे गए विंडोज ऐप को चलाने की कोशिश करते हैं तो यह काम नहीं करेगा।

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

उस ने कहा, मोनो # सी प्रोग्राम को क्रॉस-प्लेटफॉर्म बनाने के लिए एक अच्छा शुरुआती बिंदु है। बस कार्यक्रम को नवीनतम वाइन के साथ पैकेज न करें और हालांकि इसे किया जाए। देखो कि पिकासा कहाँ ले गया।

दो भाषाओं / प्लेटफार्मों की राजनीतिक स्थिरता के साथ, आरएमएस संभवतः इस बात पर ध्यान देना शुरू कर देगा कि कैसे नोवेल की अध्यक्षता मोनू कर रहा है, जिसका माइक्रोसॉफ्ट के साथ हनीमून काफी कुख्यात है। दोनों प्लेटफार्मों को अभी राजनीतिक रूप से अस्थिर माना जा सकता है।

यदि आप वास्तव में आसान क्रॉस-प्लेटफॉर्म चाहते हैं, तो आजमाया हुआ और सच्चा रास्ता क्यूटी है जो राजनीतिक रूप से काफी स्थिर है क्योंकि अभी यह एक) एलजीपीएलडीई, बी) अपने प्रमुख लाइसेंसिंग मुद्दों के साथ पिछले वर्षों में किया गया है, और सी) नोकिया द्वारा समर्थित है, जो वास्तव में लोकप्रिय फोन बेचता है।


5
कितनी जल्दी चीजें बदल जाती हैं। नोकिया अब लोगों को मनचाहे फोन नहीं बेचता है, और नोवेल अब क्यूटी और मोनो के भविष्य के संदेह में मौजूद नहीं है। शायद यही कारण है कि व्यवसायों को Microsoft की तरह 'प्राथमिक-समर्थित' प्रणालियों के अलावा कुछ भी उपयोग करना पसंद नहीं है। यही कारण है कि खुला स्रोत इतना अच्छा विचार है।
gbjbaanb

4

मोनो माइक्रोसॉफ्ट के .net का 1: 1 पोर्ट नहीं है। ऐसी प्रौद्योगिकियाँ हैं जो मोनो केवल कार्यान्वित नहीं करती हैं या उनकी कोई योजना नहीं है (उदाहरण के लिए, वर्कफ़्लो फ़ाउंडेशन या WPF ), जबकि दूसरी ओर उनकी स्वयं की कुछ प्रौद्योगिकियाँ हैं जो Microsoft .NET नहीं करता है, जैसे, SIMD एक्सटेंशन ।

संक्षिप्त उत्तर: मोनो और Microsoft .NET एक ही अंतर्निहित नींव - CIL और BCL - पर आधारित हैं, लेकिन अलग-अलग परियोजनाएं हैं।


2

मूल पोस्ट में बयानों के लिए छोटी टिप्पणी। मैं तर्क दूंगा कि TCK एक सैद्धांतिक उपकरण है, जो Oracle को जावा का दावा करने की अनुमति देता है, एक खुला मानक है। क्योंकि यदि आप ध्यान दें, तो अपाचे हार्मनी असफल होने के लिए कई वर्षों से "जावा" के रूप में प्रमाणित होने की कोशिश कर रहा है। यह स्पष्ट है कि ओरेकल वास्तव में एक खुले स्रोत के कार्यान्वयन में दिलचस्पी नहीं रखता है, इसके अलावा वे जो अधिक या कम नियंत्रण (OpenJDK) से संबद्ध हैं, जो btw है। मोनो की तरह, पूर्ण नहीं है (यानी कोई जावा वेब स्टार्ट सपोर्ट नहीं है) और बंद स्रोत हॉटस्पॉट कार्यान्वयन में उपलब्ध कुछ अनुकूलन गायब हैं।

यकीनन, 2010 तक; (अधिकांश) जावा खुला स्रोत है, लेकिन एक खुला मानक नहीं है, जबकि (अधिकांश) .NET खुला स्रोत नहीं है, बल्कि एक खुला मानक है। पाठ्यक्रम के अपवाद हैं, डीएलआर, आयरनपिथॉन, आयरनरुबी और एफ # वास्तव में खुले स्रोत हैं। मोनो दिलचस्प है क्योंकि यह दोनों दुनिया का सर्वश्रेष्ठ प्रदान करता है, खुले मानकों का खुला स्रोत कार्यान्वयन।


जावा का खुलापन इस तरह का महत्वपूर्ण हिस्सा नहीं है। यह मेरा अनुभव है कि मेरे कार्यक्रम जेवीएम पर अच्छी तरह से चलते हैं जो टीसीके पास कर चुके हैं इसलिए यह एक महत्वपूर्ण पैरामीटर है।

1

सभी तकनीकी को एक तरफ रखकर, एक बहुत महत्वपूर्ण हिस्सा तब होता है जब वास्तव में कोड लिखते हैं।

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

फिर भी एक नए प्रोजेक्ट के लिए (या आप आसानी से रिफ्लेक्टर कर सकते हैं), .Net / मोनो को एक संभावित पोर्टेबल रनटाइम के रूप में चुनना, समझ में आता है, लेकिन आप अपने कोड को मोनो पर बहुत पहले परीक्षण करके बहुत सारी परेशानियों से बचा लेते हैं, भले ही वह प्रोजेक्ट हो मल्टीप्लायर जाने का केवल थोड़ा सा बदलाव। यदि आप एक निरंतर एकीकरण सर्वर का उपयोग करते हैं, तो यह मोनो बिल्ड नोड की स्थापना के रूप में सरल हो सकता है। विकसित होने के दौरान कई मुद्दों को हल किया जा सकता है, बस इससे बाहर एक आदत बनाने (जैसे पथ पथ का निर्माण) और अपने कोड का एक बड़ा हिस्सा केवल मोनो प्रथाओं का उपयोग करके और थोड़े से पूर्वविचार द्वारा मोनो पर पोर्टेबल और यूनिट-परीक्षण किया जा सकता है। शेष (यानी इकाई परीक्षण विफल) तब प्लेटफ़ॉर्म-विशिष्ट (जैसे PInvoke का उपयोग करने वाला कोड) है, लेकिन पर्याप्त रूप से इनकैप्सुलेट किया जाना चाहिए ताकि लक्षित प्लेटफ़ॉर्म पर वैकल्पिक कार्यान्वयन प्रदान करने में सक्षम हो सके।

बेशक, मोनो में उपलब्ध लाइब्रेरी (.Net) या कम्पैटिबल (थर्ड पार्टी) का उपयोग करना इनमें से किसी को भी शामिल नहीं करता है, लेकिन मेरे क्षेत्र में यह अभी तक देखा नहीं जा सका है। यह वह रणनीति है जिसे हम वास्तव में काम पर उपयोग करते हैं, और इसे लागू करते समय मुझे यह दावा करने का कोई डर नहीं है कि .net + मोनो क्रॉस प्लेटफॉर्म है।


0

यह अलग है ईमानदार जवाब। मैंने IIS से अपाचे में स्थानांतरित छोटे वेब सर्वर सामान को देखा है, लगभग बिना किसी कठिनाई के मोनो के तहत चल रहा है। मैंने लिनक्स पर विन फॉर्म का उपयोग करके अपरिवर्तित विंडोज .नेट एप्लिकेशन को सफलतापूर्वक चलाया है।

हालाँकि, जब तक यह काम कर सकता है, यदि आप एक एपीआई कॉल का उपयोग कर रहे हैं जो मोनो पर लागू नहीं है, तो यह काम नहीं करेगा, और एकमात्र समाधान यह है कि या तो आपके आवेदन को फिर से लिखना, खिड़कियों के साथ रहना या मोनो में अतिरिक्त सामान लिखना।

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