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




linux mono (10)

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

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

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

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

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

मेरा मुख्य लक्ष्य मंच लिनक्स होगा।

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

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


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

मैं निम्नलिखित प्लेटफार्मों में सी # कोड साझा करता हूं: - आईओएस (आईफोन / आईपैड) - एंड्रॉइड - वेब (एचटीएमएल 5) - मैक (ओएस एक्स) - लिनक्स - विंडोज

मैं इसे और भी स्थान साझा कर सकता हूं: - विंडोज फोन 7 - वाईआई - एक्सबॉक्स - पीएस 3 - आदि

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

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

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

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

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

मेरी कुछ अन्य टिप्पणियों पर मेरा लेना:

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

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

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

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

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

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

समस्या: जावा में बेहतर (व्यापक) उपकरण समर्थन है

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

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

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

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

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

समस्या: मोनो। नेट।

उत्तर: नहीं, यह नहीं करता है। आईएमएचओ, यह अक्सर एक निर्दिष्ट लेकिन गलत कथन है।

सी #, वीबीएनईटी, एफ #, आयरनपीथन, आयरन रूबी के साथ एक्समारिन जहाजों से मोनो वितरण, और मुझे लगता है कि शायद बॉक्स से बाहर हो। मोनो सी # कंपाइलर पूरी तरह से एमएस के साथ अद्यतित है। मोनो वीबी.नेट कंपाइलर एमएस संस्करण को अंतराल करता है। अन्य कंपाइलर दोनों प्लेटफार्मों पर समान हैं (जैसे अन्य .NET भाषाओं जैसे नेमेरल, बू और फालेंजर (PHP) हैं।

गतिशील भाषा रनटाइम (डीएलआर), प्रबंधित एक्सटेंसिबिलिटी फ्रेमवर्क (एमईएफ), एफ #, और एएसपी.नेट एमवीसी सहित वास्तविक माइक्रोसॉफ्ट लिखित कोड के साथ मोनो जहाजों। चूंकि रेजर ओपन सोर्स नहीं है, मोनो वर्तमान में एमवीसी 2 के साथ जहाजों पर है लेकिन एमवीसी 3 मोनो पर ठीक काम करता है।

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

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

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

समस्या: माइक्रोसॉफ्ट बुरा है।

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

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

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

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

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

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


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

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

2014 के लिए अद्यतन करें

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


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

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


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

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


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


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


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

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


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

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

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

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


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

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





cross-platform