क्या .NET / मोनो या जावा क्रॉस-प्लेटफॉर्म विकास के लिए बेहतर विकल्प है? [बन्द है]


108

जावा की तुलना में मोनो के लिए पुस्तकालय कितने कम हैं?

मुझे दोनों विकल्पों पर ओवरव्यू की कमी है लेकिन मुझे अपनी अगली परियोजना के लिए बहुत अधिक स्वतंत्रता है। मैं के क्षेत्रों में कठिन तकनीकी तथ्यों की तलाश कर रहा हूं

  • प्रदर्शन (उदाहरण के लिए, मुझे बताया गया है कि जावा थ्रेडिंग के लिए अच्छा है, और मैंने सुना है कि रनटाइम कोड ऑप्टिमाइज़ेशन .NET के लिए हाल ही में बहुत अच्छा हो गया है)
  • वास्तविक विश्व पोर्टेबिलिटी (यह दोनों पोर्टेबल होने के लिए है, प्रत्येक के लिए कैच -22 क्या है?)
  • उपकरण उपलब्धता ( CI , बिल्ड ऑटोमेशन, डीबगिंग, IDE)

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

मेरा मुख्य लक्ष्य प्लेटफ़ॉर्म लिनक्स होगा।

संपादित करें: मेरे प्रश्न को और अधिक पर्याप्त रूप से वाक्यांशित करने के लिए, मैं पूरे पैकेज (3 पार्टी लाइब्रेरी आदि) में दिलचस्पी रखता हूं, न कि केवल भाषा। पुस्तकालयों के लिए, जो शायद इस सवाल से उब जाता है कि "जावा की तुलना में मोनो के लिए पुस्तकालय कितने कम हैं"?


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


3
बड़ा सवाल है। हम क्रॉस-प्लेटफॉर्म विकास के लिए भी एक मूल्यांकन देख रहे हैं।
Mat Nadrofsky

मैं "कौन-सी भाषा" टैग जोड़ूंगा, लेकिन पहले से ही 5 हैं, इसलिए कोई भाग्य नहीं है।
डैनियल डारनास

दृढ़ता से इस बात पर निर्भर करता है कि आप किन प्लेटफार्मों को लक्षित करते हैं ...
लगाते हैं Thorbjørn Ravn Andersen

1
अब आपके लिए गोलंग देखने का एक अच्छा समय हो सकता है ...
स्टार्टअपगू

ज़ोजो भी विचार करने लायक हो सकता है। यह विंडोज, मैक लिनक्स के लिए एलएलवीएम का उपयोग कर देशी ऐप्स को संकलित करता है। इसमें एक IDE बिल्ड ऑटोमेशन, डिबगिंग आदि है। लाइब्रेरी में बहुत सारी सुविधाएँ हैं और आवश्यकतानुसार इन्हें बढ़ाया जा सकता है। www / xojo.com
पॉल

जवाबों:


96

खैर .... जावा वास्तव में अधिक पोर्टेबल है। मोनो को हर जगह लागू नहीं किया गया है, और यह Microsoft के कार्यान्वयन में महत्वपूर्ण रूप से पीछे है। जावा एसडीके प्लेटफार्मों के पार बेहतर सिंक में रहता है (और यह अधिक प्लेटफार्मों पर काम करता है)।

मैं यह भी कहूंगा कि जावा के पास उन सभी प्लेटफार्मों पर अधिक टूल की उपलब्धता है, हालांकि विंडोज़ प्लेटफार्मों पर .NET के लिए बहुत सारे उपकरण उपलब्ध हैं।

2014 के लिए अपडेट करें

मैं 2014 में भी यह राय रखता हूं। हालांकि, मैं यह कहकर योग्यता प्राप्त करूंगा कि मैं अभी केवल मोनो पर कुछ ध्यान देना शुरू कर रहा हूं, वास्तव में देखभाल नहीं करने के कारण, इसलिए मोनो रनटाइम (या पारिस्थितिकी तंत्र) में सुधार हो सकता है। ) कि मुझे अवगत नहीं कराया गया है। AFAIK, अभी भी WIF के WPF, WCF, WF के लिए कोई समर्थन नहीं है। मोनो iOS पर चल सकता है, लेकिन मेरी जानकारी में, जावा रनटाइम अभी भी मोनो की तुलना में अधिक प्लेटफार्मों पर चलता है। इसके अलावा, मोनो कुछ बेहतर टूलिंग (Xamarin) देखना शुरू कर रहा है, और Microsoft को लगता है कि प्रतिस्पर्धी के बजाय उन्हें प्रतिस्पर्धी बनाने के लिए भागीदारों के साथ काम करने के लिए बहुत अधिक क्रॉस-प्लेटफ़ॉर्म का रवैया और इच्छाशक्ति है, उदाहरण के लिए, मोनो होगा आगामी OWIN / Helios ASP.NET परिदृश्य का एक बहुत महत्वपूर्ण हिस्सा)। मुझे संदेह है कि आने वाले वर्षों में पोर्टेबिलिटी में अंतर तेजी से कम होगा,

2018 के लिए अपडेट करें

इस पर मेरा विचार दूसरे तरीके से जाने लगा है। मुझे लगता है कि .NET, मोटे तौर पर, विशेष रूप से .NET कोर के साथ, जावा के साथ "पोर्टेबिलिटी समानता" को प्राप्त करना शुरू कर दिया है। कुछ प्लेटफ़ॉर्म के लिए WPF को .NET Core में लाने के प्रयास चल रहे हैं, और .NET कोर अब कई महान प्लेटफार्मों पर चलता है। मोनो (Xamarin के स्वामित्व में, जो अब माइक्रोसॉफ्ट के स्वामित्व में है) पहले से कहीं अधिक परिपक्व और पॉलिश उत्पाद है, और कई प्लेटफार्मों पर काम करने वाले एप्लिकेशन लिखना अब .NET हैकरी के गहरे सूक्ति का डोमेन नहीं है, लेकिन एक अपेक्षाकृत सीधा प्रयास है । बेशक, पुस्तकालयों और सेवाओं और अनुप्रयोग हैं जो केवल विंडोज हैं या केवल विशिष्ट प्लेटफार्मों को लक्षित कर सकते हैं - लेकिन यह जावा (मोटे तौर पर) के बारे में कहा जा सकता है।

यदि मैं इस बिंदु पर ओपी के जूते में था, तो मैं भाषाओं में निहित किसी भी कारण के बारे में नहीं सोच सकता हूं या खुद को टेक स्टैक नहीं करूंगा जो मुझे इस बिंदु से आगे जाने वाले किसी भी आवेदन के लिए .NET चुनने से रोक देगा।


2
मैं वास्तव में इसे पढ़कर बहुत खुश हूं और माइक्रोसॉफ्ट की दुनिया में वोटों के बारे में जानकारी देता हूं। .NET वास्तव में अच्छा है, लेकिन जावा में एक वैधता है जैसा कि मैंने हमेशा एक .NET
डेवलपर

इसके लिए +1। मैंने जावा पोर्टेबिलिटी (गैर-तुच्छ अनुप्रयोगों के लिए, अर्थात वेब सर्वर, जटिल GUI, विश्लेषणात्मक इंजन) को अन्य वैकल्पिक विकल्पों से बेहतर पाया है। यह बिल्कुल सही नहीं है, लेकिन यह सबसे अच्छा है जो आप अभी प्राप्त कर सकते हैं।
मिकेरा

1
@, क्या आप अभी भी 2013 में यह राय रखते हैं? यदि आप ऐसा करते हैं, तो क्या आप इसका उल्लेख करना चाहेंगे, और यदि आप इस उत्तर को अपडेट नहीं कर रहे हैं? 4 साल पुराने उत्तर पढ़ते समय बहुत बार यह बताना मुश्किल है।
बेंजामिन ग्रुएनबाम

1
@BenjaminGruenbaum हां, हालांकि मैं इस बिंदु पर अपनी राय को यह कहकर योग्य करूंगा कि मैंने लंबे समय में मोनो पर ज्यादा ध्यान नहीं दिया है, इसलिए मोनो रनटाइम (या पारिस्थितिकी तंत्र) में सुधार हो सकता है जो मैंने नहीं किया है। के बारे में अवगत कराया। AFAIK, अभी भी WPF, WCF, या WF के लिए कोई समर्थन नहीं है। मोनो iOS पर चल सकता है, लेकिन मेरी जानकारी में, जावा रनटाइम अभी भी मोनो की तुलना में अधिक प्लेटफार्मों पर चलता है। तो हाँ। योग्य, लेकिन हाँ।
बेन कॉलिन्स

@ HighCore तर्क मोनो के खिलाफ नहीं है , प्रति से। यह सिर्फ एक तथ्य है: यदि आप WPF पर निर्भर कोड लिखते हैं, तो आप मोनो का उपयोग नहीं कर सकते हैं; एर्गो यह उस तरह से अस्थिर है। जावा का UI फ्रेमवर्क चूस सकता है, लेकिन जहां तक ​​मुझे पता है कि वे कहीं भी काम करेंगे जो जावा काम करता है (और हार्डवेयर उस तरह के UI का समर्थन करता है)। यह जावा को बेहतर नहीं बनाता है, यह इस विशिष्ट तरीके से इसे और अधिक पोर्टेबल बनाता है।
बेन कॉलिन्स

112

जिन प्लेटफॉर्म का मैं समर्थन करना चाहता हूं, उन्हें लक्षित करने के लिए मोनो एक बेहतर काम करता है। इसके अलावा, यह सभी व्यक्तिपरक है।

मैं निम्नलिखित प्लेटफार्मों पर C # कोड साझा करता हूं: - iOS (iPhone / iPad) - Android - वेब (HTML5) - Mac (OS X) - लिनक्स - विंडोज

मैं इसे और भी जगहों पर साझा कर सकता था: - विंडोज फोन 7 - Wii - XBox - PS3 - आदि।

Biggie iOS है क्योंकि MonoTouch काल्पनिक रूप से काम करता है। मुझे जावा के साथ iOS को लक्षित करने का कोई अच्छा तरीका नहीं पता है। आप जावा के साथ विंडोज फोन 7 को लक्षित नहीं कर सकते हैं, इसलिए मैं कहूंगा कि मोबाइल के लिए जावा बेहतर होने के दिन हमारे पीछे हैं।

मेरे लिए सबसे बड़ा कारक यद्यपि व्यक्तिगत उत्पादकता (और खुशी) है। जावा IMHO के आगे एक भाषा के रूप में C # है और .NET फ्रेमवर्क उपयोग करने के लिए एक खुशी है। जावा 7 और जावा 8 में जो कुछ भी जोड़ा जा रहा है, वह वर्षों से C # में है। Scala और Clojure (दोनों CLR पर उपलब्ध) जैसी JVM भाषाएँ हालांकि बहुत अच्छी हैं।

मैं मोनो को अपने आप में एक प्लेटफ़ॉर्म के रूप में देखता हूं (एक महान) और विंडोज़ पर मोनो के माइक्रोसॉफ्ट कार्यान्वयन के रूप में .NET का इलाज करता हूं। इसका मतलब है कि मैं पहले मोनो पर विकसित और परीक्षण करता हूं। यह अद्भुत काम करता है।

यदि जावा और .NET दोनों (मोनो लेट्स कहते हैं) किसी भी कॉर्पोरेट समर्थन के बिना ओपन सोर्स प्रोजेक्ट थे, तो मैं हर बार जावा पर मोनो का चयन करूंगा। मेरा मानना ​​है कि यह सिर्फ एक बेहतर मंच है।

.NET / मोनो और JVM दोनों ही शानदार विकल्प हैं, हालांकि मैं व्यक्तिगत रूप से JVM पर जावा की तुलना में कुछ अन्य भाषा का उपयोग करूंगा।

मेरी कुछ अन्य टिप्पणियाँ हैं:

समस्या: प्रदर्शन

** उत्तर: जेवीएम और सीएलआर दोनों वे करते हैं जो वे कहते हैं कि अवरोधकों से बेहतर प्रदर्शन करते हैं। मैं कहूंगा कि जेवीएम बेहतर प्रदर्शन करता है। मोनो आम तौर पर .NET से धीमी होती है (हालांकि हमेशा नहीं)।

मैं व्यक्तिगत रूप से ASP.NET MVC को J2EE पर किसी भी दिन डेवलपर और अंतिम-उपयोगकर्ता दोनों के रूप में ले जाऊंगा। Google नेटिव क्लाइंट के लिए समर्थन बहुत अच्छा है। इसके अलावा, मुझे पता है कि डेस्कटॉप जावा ऐप्स के लिए खराब जीयूआई प्रदर्शन अतीत की बात है, लेकिन मैं धीमी गति से खोजता रहता हूं। फिर, मैं WPF के लिए भी यही कह सकता था। GTK # बहुत तेज है, हालांकि कोई कारण नहीं है कि उन्हें धीमा होना है।

समस्या: जावा में पुस्तकालयों का एक बड़ा पारिस्थितिकी तंत्र उपलब्ध है।

उत्तर: संभवतः सच है, लेकिन यह व्यवहार में एक गैर-मुद्दा है।

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

समस्या: जावा में बेहतर (व्यापक) टूल सपोर्ट है

उत्तर: विंडोज पर नहीं। अन्यथा मैं सहमत हूं। हालांकि मोनोडेवल अच्छा है।

मैं मोनोएवुल्ड को एक चिल्लाहट देना चाहता हूं ; यह एक गहना है। MonoDevelop मैं कोड पूरा (intellisense), Git / तोड़फोड़ एकीकरण, यूनिट परीक्षणों के लिए समर्थन, SQL एकीकरण, डिबगिंग, आसान refactoring और ऑन-द-फ्लाई डिकंपिलेशन के साथ विधानसभा ब्राउज़िंग सहित उपयोग किए जाने वाले अधिकांश टूल को एकीकृत करता है। सर्वर-साइड वेब से मोबाइल ऐप तक सब कुछ के लिए समान वातावरण का उपयोग करना अद्भुत है।

मुद्दा: प्लेटफार्मों भर में संगतता।

उत्तर: विंडोज़ सहित सभी प्लेटफार्मों में मोनो एक एकल कोड-बेस है।

पहले मोनो के लिए विकसित करें और यदि आप चाहें तो .NET को विंडोज पर तैनात करें। यदि आप .NET की तुलना MS से जावा से करते हैं, तो Java में प्लेटफार्मों के बीच स्थिरता के मामले में बढ़त है। देखें अगला जवाब ...

समस्या: मोनो lags .NET।

उत्तर: नहीं यह नहीं है। IMHO, यह अक्सर कहा जाने वाला गलत कथन है।

C #, VB.NET, F #, IronPython, IronRuby के साथ Xamarin जहाजों से मोनो वितरण, और मुझे लगता है कि शायद बॉक्स से बाहर बू। मोनो C # कंपाइलर MS के साथ पूरी तरह से अद्यतित है। मोनो VB.NET कंपाइलर MS वर्जन को लैग करता है। अन्य कंपाइलर दोनों प्लेटफार्मों पर समान हैं (जैसा कि अन्य .NET लैंग्वेज हैं जैसे कि नेमारल, बू और फाल्न्गेर (PHP))।

डायनेमिक भाषा रनटाइम (DLR), प्रबंधित एक्सटेंसीबिलिटी फ्रेमवर्क (MEF), F #, और ASP.NET MVC सहित बहुत सारे वास्तविक Microsoft लिखित कोड के साथ मोनो जहाज। क्योंकि रेज़र ओपन सोर्स नहीं है, मोनो वर्तमान में MVC2 के साथ जहाज करता है लेकिन MVC3 मोनो पर ही ठीक काम करता है।

कोर मोनो प्लेटफॉर्म ने .NET या कई वर्षों से गति बनाए रखी है और संगतता प्रभावशाली है। आप आज पूर्ण C # 4.0 भाषा और यहां तक ​​कि कुछ C # 5.0 सुविधाओं का उपयोग कर सकते हैं। वास्तव में, मोनो अक्सर कई तरीकों से .NET का नेतृत्व करता है।

मोनो सीएलआर के कुछ हिस्सों को लागू करता है कल्पना करता है कि Microsoft भी समर्थन नहीं करता है (जैसे 64 बिट सरणियाँ)। .NET दुनिया में प्रौद्योगिकी के सबसे रोमांचक नए टुकड़ों में से एक रोज़लिन है । मोनो ने कई वर्षों के लिए सेवा के रूप में सी # संकलक की पेशकश की है। रोसेलिन की पेशकश में से कुछ NRefractory के माध्यम से उपलब्ध है । एक उदाहरण था मोनो अभी भी गेमिंग प्रदर्शन में तेजी लाने के लिए SIMD निर्देश होगा।

Microsoft .NET के शीर्ष पर कई उत्पाद पेश करता है जो मोनो में उपलब्ध नहीं होते हैं जो मोनो लैगून के बारे में गलत धारणा है जो कि आती है। विंडोज प्रेजेंटेशन फाउंडेशन (WPF), एंटिटी फ्रेमवर्क (EF), WCF (विंडोज कम्युनिकेशन फाउंडेशन) ऐसे उत्पादों के उदाहरण हैं, जो मोनो पर काम नहीं करते हैं, या खराब रूप से समर्थित हैं। स्पष्ट समाधान इसके बजाय GTK #, NHibernate, और ServiceStack जैसे क्रॉस-प्लेटफ़ॉर्म विकल्पों का उपयोग करना है।

समस्या: Microsoft बुराई है।

उत्तर: सच। तो क्या।

कई लोग मोनो का उपयोग करने से बचने के लिए निम्नलिखित कारणों की पेशकश करते हैं:

1) आपको मोनो का उपयोग नहीं करना चाहिए क्योंकि Microsoft तकनीक से बचा जाना चाहिए

2) मोनो बेकार है क्योंकि यह आपको Microsoft द्वारा प्रदान की जाने वाली प्रत्येक तकनीक का उपयोग नहीं करने देता है

मेरे लिए, यह स्पष्ट है कि ये कथन असंगत हैं। मैं पहले कथन को अस्वीकार करता हूं लेकिन उस तर्क को यहां छोड़ दूंगा। दूसरा कथन सभी .NET विकल्प के लिए सही है।

JVM एक बेहतरीन मंच है और JVM भाषाओं का विस्फोट बहुत बढ़िया है। जो आपको खुश करता है उसका उपयोग करें। अभी के लिए, यह अक्सर मेरे लिए .NET / मोनो है।


3
इस तरह के एक व्यापक जवाब के लिए धन्यवाद कि खेल में देर हो गई। मैंने कभी भी मोनो / .Net / C # का उपयोग नहीं किया है, लेकिन आपकी पोस्ट उस ब्रह्मांड के कुछ और हालिया विकास को दर्शाती है। उदाहरण के लिए, मुझे याद नहीं है कि मोनोआच 3.5 साल पहले काफी महत्वपूर्ण थी।
हनो फिएट

3
मैं आपके "मोनो। Lag .NET नहीं" जवाब से भ्रमित हूँ। आप दावा करते हैं, फिर आधा दर्जन तरीके बताए गए हैं, जो वास्तव में, lag .NET (एंटिटी फ्रेमवर्क, आदि) में हैं। यह कहना सुरक्षित है कि यह Microsoft के C # कंपाइलर को पीछे नहीं छोड़ता, लेकिन .NET इकोसिस्टम मोनो पर सबसे अच्छा है। यह आपके उद्देश्यों के लिए ठीक प्रतीत होता है, लेकिन सभी के लिए नहीं, और वहाँ एक वैध चिंता का विषय है।
समकस

1
@samkass: मुझे लगता है कि यहाँ बिंदु 'लैग्स' और 'इस लाइब्रेरी को लागू नहीं करने' के बीच का अंतर है। जावा की दुनिया में, आप स्विंग लाइब्रेरी को लागू नहीं करने के लिए एंड्रॉइड के इस अनुरूप को पा सकते हैं। कृपया यह भी ध्यान दें कि क्रॉस-प्लेटफॉर्म (और ओपन सोर्स, btw) समकक्ष दिए गए थे। मैं हर दिन मोनो का उपयोग कर रहा हूं और 'सबसे अच्छा अंश' निश्चित रूप से मेरा अनुभव नहीं था।
konrad.kruczynski

9
पूर्ण और मजबूत WCF और EF समर्थन की कमी है, और कोई WPF मोनो के लिए एक हत्यारा नहीं है, बस .NET 3.0 के बाद से मैंने जो कुछ भी काम किया है। हां, विकल्प हैं लेकिन .NET की शक्ति का एक बड़ा हिस्सा ये अतिरिक्त ढांचे हैं। इन के बिना मुझे नहीं लगता कि आप मोनो को .NET के साथ बिल्कुल भी कॉल कर सकते हैं। यह सबसे अच्छा एक आंशिक कार्यान्वयन है। मैंने NHibernate का भी उपयोग किया है और स्पष्ट रूप से EF एक बेहतर तकनीक है। कभी सर्विसस्टैक का इस्तेमाल नहीं किया। IMO मोनो जोखिम से बहुत अधिक है।
मृलेन

1
हर कोई जो WCF को याद करता है, उसे सर्विसकैक पर एक नज़र रखना चाहिए। गंभीरता से, WCF को लागू नहीं करना एक अच्छी बात थी!
असत्य

54

मैं वास्तव में .NET में विकसित होता हूं, अपने सभी परीक्षण पहले मोनो पर चलाता हूं, और फिर विंडोज पर। इस तरह मुझे पता है कि मेरे आवेदन क्रॉस प्लेटफॉर्म हैं। मैंने ASP.NET और Winforms दोनों अनुप्रयोगों पर यह बहुत सफलतापूर्वक किया है।

मुझे वास्तव में यकीन नहीं है कि कुछ लोगों को यह आभास होता है कि मोनो से कितना भयानक है, लेकिन यह निश्चित रूप से मेरे मामलों और राय में काम कर रहा है। यह सच है कि आप .NET में नवीनतम और महानतम आविष्कारों के लिए थोड़े पिछड़ जाएंगे। दुनिया, लेकिन अब तक, विंडोज़ और लिनक्स पर .NET 2.0 मेरे लिए बहुत ठोस है।

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

.NET मेरे अनुभवों के आधार पर मोनो के कारण निश्चित रूप से बहुत क्रॉस प्लेटफॉर्म है।


मुझे अज्ञानी कहें, लेकिन क्या आपको मोनो के साथ ASP.NET का परीक्षण करने की भी आवश्यकता है? सब कुछ जो .NET होगा वह सर्वर साइड है, इस प्रकार यह कोई फर्क नहीं पड़ता कि यह किस ओएस पर प्रदर्शित होता है?
एथन गुंडर्सन

9
एथन, मोनो का उपयोग करके आप लिनक्स पर ASP.net ऐप होस्ट कर सकते हैं।
एरिक हाकिंस

2
हर कोई विंडोज़ पर अपना ऐप नहीं चलाना चाहता, जो भी कारण हो।
बर्नार्ड

2
@ रिच बी: यदि कोई ग्राहक एमएस उत्पाद नहीं चाहता है, तो .NET स्पष्ट रूप से गलत विकल्प है।
Kjetil gadegaard

21
@Kjetil: मोनो एक एमएस उत्पाद नहीं है।
GEOCHET

26

जावा वास्तव में क्रॉस-प्लेटफॉर्म के रूप में है जैसा कि हर कोई कहता है कि यह है। वहाँ किसी भी मुख्यधारा के ओएस के बारे में (यहां तक ​​कि मैक ओएस एक्स, अंत में) के लिए एक जेवीएम कार्यान्वयन है, और वे सभी वास्तव में अच्छी तरह से काम करते हैं। और वहाँ खुला स्रोत उपकरण है कि बस पार मंच के रूप में कर रहे हैं के टन है।

एकमात्र पकड़ यह है कि कुछ डीएल या एसओ लिखे बिना जावा में आप कुछ देशी ऑपरेशन नहीं कर सकते हैं। यह बहुत दुर्लभ है कि ये व्यवहार में आते हैं। हालांकि, उन सभी मामलों में, मैं देशी प्रक्रियाओं और परिणामों को स्क्रीन-स्क्रैप करके इसके चारों ओर प्राप्त करने में सक्षम रहा हूं।


1
इसके अलावा, हर मामले में जहां जावा एक क्रॉस-प्लेटफॉर्म तरीके से एक देशी ऑपरेशन नहीं कर सकता है, वही .NET के लिए सही होगा
एली कोर्ट राइट साइट

आखिरकार? 10.0 से Mac OS X का JVM कार्यान्वयन हुआ है। :)
मिपाड़ी

3
@ एली - शायद सच है। यह निश्चित रूप से बहुत अधिक है। नेट / मोनो में मूल कार्यक्षमता के साथ एकीकृत करना बहुत आसान है, हालांकि यह जावा में है। इसलिए, यदि आप मूल मंच के साथ अच्छी तरह से एकीकृत करने की कोशिश कर रहे हैं, तो .NET / मोनो वास्तविक लाभ प्रदान करता है।
जस्टिन

"देशी प्रक्रियाओं और स्क्रीन-स्क्रैपिंग के परिणामों को कम करना" कंपकंपी
बेसिक

मैं 'बस किसी भी मुख्यधारा के ओएस' के बारे में समझाऊंगा, क्योंकि एंड्रॉइड या आईओएस के लिए बॉक्स से बाहर एक जेवीएम नहीं है। .NET में नई पोर्टेबल क्लास लाइब्रेरी के साथ, आप वास्तव में मोबाइल सहित प्लेटफार्मों पर संकलित कोड (हालांकि व्यावहारिक रूप से यूआई कोड नहीं) साझा कर सकते हैं।
मथिसन

18

मुझे लगता है कि सवाल गलत तरीके से लिया गया है। सी # बनाम जावा क्रॉस-प्लेटफॉर्म उपयोग की तुलना में बहुत कम दिलचस्प है (ए) जो आपको समर्थन करने की आवश्यकता है, और मुख्य पुस्तकालयों और उपलब्ध तीसरे पक्ष के पुस्तकालयों पर विचार करने वाले प्लेटफॉर्म। भाषा निर्णय लेने की प्रक्रिया का लगभग कम से कम महत्वपूर्ण हिस्सा है।


माना। यह बात है कि विभिन्न वास्तुशिल्प पर आभासी मशीनों का कितना अच्छा समर्थन है।
एलन लालडे

माना। यदि ग्राहक इसे नहीं चला सकता है तो पूर्ण विकास करने में कोई मज़ा नहीं है।
Thorbjørn रावन एंडरसन

15

क्रॉस-प्लेटफॉर्म विकास के लिए जावा एक बेहतर विकल्प है।

  • प्रदर्शन। वर्चुअल मशीन की वजह से जावा और .नेट का प्रदर्शन स्तर समान होता है, लेकिन जेवीएम में आमतौर पर साल और साल के अनुकूलन के कारण बेहतर प्रदर्शन होता है।

  • लाइब्रेरी। यद्यपि यह आपके कार्य पर निर्भर करता है, जावा में बहुत अधिक खुला स्रोत या तीसरे पक्ष के पुस्तकालय उपलब्ध हैं। GUI के लिए सर्वर ऐप, J2EE, स्प्रिंग, स्ट्रट्स आदि के लिए, हालाँकि .Net Win32 लेयर API प्रदान करता है, लेकिन यह संगतता समस्याओं का कारण बनता है। Java में Swing, SWT, AWT आदि हैं। यह ज्यादातर मामलों में काम करता है।

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

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

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


"अन्य" लिनक्स पर मोनो के साथ काम करना मुश्किल हो गया है। यह मोनो के साथ प्रमुख समस्या को दर्शाता है: मोनो का भविष्य मिगुएल डे इकाज़ा की तानाशाही पर भी निर्भर है। केस-इन-पॉइंट: "अन्य ... (असमर्थित)" के लिए द्वंद्वात्मक समर्थन [[ मोनो-project.com/Other_Downloads] लिनक्स लिनक्स के साथ मिगुएल डे इकजा के मोहभंग ( tirania.org/blog/archive/ ) के साथ लिनक्स ( IMHO ) को सहसंबंधित करता है। 2013 / मार्च -05.html )। जावा इस तानाशाही समस्या से ग्रस्त नहीं है। C # अधिक प्लेटफार्मों पर चल सकता है, लेकिन यह अधिक लागत, जोखिम, समझौता और मि। डे इकजा पर निर्भरता के साथ आता है। जी नहीं, धन्यवाद।
19

@ Michael.M तो आप Oracle के चक्कर में रहना पसंद करेंगे?
थोरबजोरन रावन एंडरसन

@ थोरबजोरन रवनअंडरसन: गलत। मुझे जितना हो सके, इसे तोड़ने दें: .net -> MSFT प्लेटफ़ॉर्म (स्थिर सफल कंपनी; सीमित लेकिन साफ-सुथरा इको-सिस्टम); मोनो -> डे इकाज़ा फ्रेमवर्क (एल तानाशाह; लिनक्स के लिए गर्म नहीं है और यह दिखाता है: [ cultofmac.com/218632/… - सेंटो 6.4 पर मोनो स्थापित करने का प्रयास करें, यह एक "असमर्थित" बुरा सपना है); जावा एक विनिर्देश है जो समुदाय से संबंधित है और कई अलग-अलग विक्रेता कार्यान्वयन हैं (ओरेकल सिर्फ एक है) [ coderanch.com/t/327542/java/java/…
StartupGuy

@ ThorbjørnRavnAndersen: .. इसके अलावा एक प्रमुख जावा समुदाय के प्रायोजक भी Oracle को बाहर कर सकते हैं और अभी भी सफल और बेहद अच्छी तरह से समर्थित हो सकते हैं - Oracle के साधन पर जावा का कोई मतलब नहीं है --- कृपया देखें: news.techworld.com/applications/3252787/ ... ओरेकल अपने सभी जावा भागीदारी को डंप कर सकता है और यह अभी भी जीवित रहेगा। अन्य विक्रेताओं के पास .Net प्लेटफॉर्म क्या है? ज़ामरीन के अलावा और कौन एक मोनो रनटाइम प्रदान करता है? जावा इनमें से केवल एक है जो तानाशाही के अधीन नहीं है और इसमें वास्तविक सामुदायिक नियंत्रण, सामुदायिक सहायता और सामुदायिक नेतृत्व शामिल हैं।
स्टार्टअप जू

1
@ Michael.M विशिष्टता? समुदाय से संबंधित? मुझे लगता है कि आप गलत हैं - मैं यह भी है कि विश्वास करते हैं केवल सूर्य के अधिग्रहण के बाद OpenJDK परियोजना को बंद करने कारण जीपीएल नहीं था। जावा ओरेकल के लोहे की मुट्ठी में है, सिर्फ इसलिए कि टीसीके स्वतंत्र रूप से उपलब्ध नहीं है और यही वह है जो जेवीएम बनाने के लिए आवश्यक है जो ओरेकल जेवीएम की तरह व्यवहार करता है। मुझे मोनो या डे इकजा से कोई समस्या नहीं है, लेकिन मुझे नहीं लगता कि जावा की स्थिति ज्यादा बेहतर है। गति के साथ एकमात्र वैकल्पिक JVM परियोजना की मृत्यु हो गई जब IBM ने इसका समर्थन करना बंद कर दिया।
थोरबजोरन रावन एंडरसन

9

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


8

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

इसके विपरीत, .NET पारिस्थितिकी तंत्र में मोनो निश्चित रूप से एक द्वितीय श्रेणी का नागरिक है।

आपके लक्षित ग्राहक कौन हैं, इस पर निर्भर करते हुए, आप यह भी पा सकते हैं कि मोनो का उपयोग करने के खिलाफ असली पुशबैक है - क्या नोवेल मोनो के लिए उसी तरह का विक्रेता समर्थन प्रदान करता है जो आपको विंडोज़ पर जावा या .NET के लिए मिलेगा?

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


मैं मोनो द्वितीय श्रेणी का नागरिक होने के साथ सहमत हूं, लेकिन निष्कर्ष के साथ नहीं। जावा एक लंबे समय के आसपास रहा है और विरासत quirks और स्मृति प्रबंधन मुद्दे से भरा हुआ है, यह उल्लेख करने के लिए कि यह लगभग हमेशा कुछ करने का सबसे क्रियात्मक तरीका चुनता है। यह भी वर्षों के लिए बहुत स्थिर (भाषा) है और हाल ही में उन विशेषताओं को शामिल करने के लिए शुरू किया है जो वर्षों से नेट में हैं। IMHO, यह दो बुराइयों के बीच एक विकल्प है ... परतदार प्लेटफ़ॉर्म w / .Net या एक लंबरिंग बेमिथ का समर्थन करता है जो विकसित होने के लिए बहुत धीमा है और कोड करने के लिए एक घर का काम है।
बेसिक

7

जावा को क्रॉस-प्लेटफ़ॉर्म होने के लिए डिज़ाइन किया गया था; सी # / नेट नहीं था। जब संदेह हो, तो उस उपकरण का उपयोग करें जो आपके उद्देश्य के लिए डिज़ाइन किया गया था।

संपादित करें: निष्पक्षता में, .NET को एम्बेडेड / पीसी / सर्वर वातावरण पर काम करने के लिए डिज़ाइन किया गया था, इसलिए यह क्रॉस-प्लेटफ़ॉर्म का SORT है। लेकिन यह लिनक्स के लिए डिज़ाइन नहीं किया गया था।


3
ठीक है, सी # आईएसओ मानकीकृत है, इसलिए विचार कुछ क्रॉस-प्लेटफ़ॉर्म का था। Microsoft अन्य प्लेटफ़ॉर्म के लिए कार्यान्वयन विकसित नहीं करना चाहता था, लेकिन भाषा के मानक होने के कारण इसे अन्य पक्षों पर छोड़ दिया गया है। । नेट फ्रेमवर्क एक अधिक जटिल कहानी है, हालांकि।
ज़प्पन

मोनो एक अच्छा कार्यान्वयन है, हालांकि और DotGNU (मैक के लिए भी)
आंद्रेई रोनेया

1
zappan: C # पर मान्य बिंदु (पता नहीं), लेकिन .NET बहुत बड़ा है। जाहिर है मुझे यहां कोई व्यक्तिगत अनुभव नहीं है।
अलेक्सईएमके

@ ज़प्पन - व्यावहारिक दृष्टिकोण से, यह अप्रासंगिक है कि सी # मानकीकृत है (या कि मोनो सी # का एक बहुत अच्छा क्लोन बनाता है)। प्लेटफ़ॉर्म पोर्टेबिलिटी पूरे प्लेटफ़ॉर्म (लाइब्रेरी और टूल इकोसिस्टम सहित) के बारे में है, न कि केवल भाषा के लिए। इस अर्थ में .Net निश्चित रूप से पूरी तरह से क्रॉस-प्लेटफॉर्म नहीं है।
मिकेरा

7

मुझे लगता है कि उत्तर "यह निर्भर करता है।" जावा केवल कुछ के बारे में चलता है, लेकिन .NET / मोनो डेस्कटॉप के लिए एक बेहतर ढांचा है। इसलिए मुझे लगता है कि उत्तर वास्तव में इस बात पर निर्भर करता है कि आप लक्ष्यीकरण के लिए किन प्लेटफार्मों की योजना बनाते हैं।


डेस्कटॉप विंडोज़ का पर्याय नहीं है, भले ही उसमें डेस्कटॉप स्पेस का सबसे बड़ा हिस्सा हो।
ZOXIS

6

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

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


ओएस एक्स 10.6 ने अब पूरी तरह से सूर्य जावा 6 रिलीज के साथ पकड़ लिया है।
Thorbjørn रावन एंडरसन

5

मैं जावा को C # से अधिक पोर्टेबल होने के लिए वोट करूंगा। जावा निश्चित रूप से मानक पुस्तकालयों का एक बहुत समृद्ध सेट है। जकार्ता परियोजना ( http://jakarta.apache.org/ ) द्वारा उपलब्ध कराए गए ओपन सोर्स 3 पार्टी लाइब्रेरी का एक व्यापक सेट भी है ।

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


4

अन्य भाषा विकल्प भी हैं। मैं पायथन का काफी शौकीन हो गया हूं, जो विंडोज, लिनक्स और मैक पर अच्छा काम करता है, और पुस्तकालयों का एक समृद्ध समूह है।


हाँ, मैं पायथन से प्यार करता हूं और इसमें Django है जो मुझे वेब ऐप्स के लिए पसंद है, लेकिन कुछ चीजें थीं जो इसे अस्वीकार्य बनाती थीं, दुभाषिया के मानक सी कार्यान्वयन में जीआईएल का सबसे महत्वपूर्ण होना। मेरे पास कई ऑपरेशन हैं जो मल्टीकोर मशीनों पर समानांतर कंप्यूटिंग से बहुत लाभ उठाते हैं और मुझे cPytson में ऐसा करने के लिए प्रक्रियाओं को स्पॉन करना होगा।
हन्नो फिएट

3

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

स्टैक ओवरफ्लो पर पर्याप्त शब्द नहीं हैं तनाव के लिए यह कितना आसान है कि कुछ देशी कहा जाता है और .NET / मोनो में निष्पादित किया जाता है (कम से कम मेरे अनुभव में 3 ...) कई प्लेटफार्मों बनाम बराबर जावा प्रयास।


मैं सहमत हूं, .NET / मोनो से प्लेटफ़ॉर्म विशिष्ट कोड को कॉल करना सुपर आसान है जब तक कि इसे C से कॉल किया जा सकता है। CXXI ​​(स्पष्ट सेक्सी) के साथ-साथ C ++ कोड को कॉल करने के लिए यह एक केकवॉक बन रहा है। tirania.org/blog/archive/2011/Dec-19.html
जस्टिन

2

Gatorhall क्या आपके पास वापस जाने के लिए कुछ डेटा है?

प्रदर्शन। वर्चुअल मशीन की वजह से जावा और .नेट का प्रदर्शन स्तर समान होता है, लेकिन जेवीएम में आमतौर पर साल और साल के अनुकूलन के कारण बेहतर प्रदर्शन होता है।

पृष्ठभूमि: मैं 3.1 के बाद से एक विंडोज आदमी हूं और वर्तमान में एक लिनक्स उपयोगकर्ता (अभी भी विंडोज 7, महान ओएस पर चल रहा हूं, विजुअल स्टूडियो 2010 और अन्य उपकरणों के लिए एक वीएम पर)।

बिंदु: मुझे और बहुत से उपयोगकर्ता (विंडोज़, लिनक्स, आदि) मुझे पता है, आप से असहमत हो सकते हैं। जावा एक लिनक्स डेस्कटॉप एप्लिकेशन पर भी धीमी गति से प्रदर्शन करता है, ASP.NET कई बार जावा सर्वर पेजों पर तेजी से प्रदर्शन करता है। कुछ सहमत हो सकते हैं कि गैर-संकलित PHP भी कई परिदृश्यों में बेहतर प्रदर्शन करता है।

जावा अधिक क्रॉस-प्लेटफ़ॉर्म है? मुझे इस बारे में कोई संदेह नहीं है (इतिहास इस पर वापस), लेकिन तेज़ (यह नहीं कह रहा है कि .NET ऐसा नहीं है) कुछ निश्चित नहीं है और मैं कुछ वास्तविक बेंचमार्क देखना चाहूंगा।


एक और सवाल है जो मदद कर सकता है और निश्चित रूप से भाषा का शूट-आउट है । JVM अधिक भारी अनुकूलित हो सकता है लेकिन यह करीब है (विशेषकर विंडोज पर)। ASP.NET बनाम J2EE या JSP के लिए बेंचमार्क और भी अधिक संदिग्ध हैं, लेकिन मुझे यह विश्वास करने में कोई परेशानी नहीं है कि ASP.NET बहुत तेज है भले ही रनटाइम्स टाई हो।
जस्टिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.