क्या जावा (अभी भी) पसंद की क्रॉस प्लेटफॉर्म भाषा है? [बन्द है]


20

जब मैंने नब्बे के दशक में जावा का उपयोग करना शुरू किया, तो यह सब " एक बार लिखो, कहीं भी भागो! " एक दिन से था। यह शायद तब सब सच था और मैं गाना बजानेवालों का भी हिस्सा था।

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

तो, क्या यह आज भी सच है? क्या जावा अभी भी बहु मंच विकास के लिए पसंद की भाषा है?

  • कृपया क्रॉस प्लेटफ़ॉर्म पहलुओं पर ध्यान देने के साथ विशिष्ट बनें।
  • मैं सामान्य भाषा सुविधा तुलना के लिए नहीं कह रहा हूं।

अद्यतन: अब तक की शानदार प्रतिक्रियाएँ! अधिकांश उत्तर जावा या वेब के पक्ष में हैं। स्क्रिप्ट भीड़ से कोई इनपुट?



3
यह टिप्पणी सवाल के दिल को संबोधित नहीं करती है, लेकिन यह विचार करने के लिए एक कारक है: विंडोज उपयोगकर्ताओं पर लक्षित जावा-आधारित वेब एप्लिकेशन कुछ रहने वाले हैं। विंडोज के लिए ओरेकल जेवीएम में हाल ही में बहुत सारे सुरक्षा मुद्दे थे। जैसे, आप पा सकते हैं कि प्रेमी उपयोगकर्ता जावा-आधारित वेब ऐप का उपयोग नहीं करेंगे क्योंकि उन्होंने JVM की स्थापना रद्द कर दी है।
प्रहार करें

आपका प्रश्न इस धारणा पर आधारित है कि यह शुरू करने के लिए पसंद की क्रॉस प्लेटफॉर्म भाषा भी थी।
लुकास रामेज

जवाबों:


10

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

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

क्या जावा वहाँ एक लाभ है? मुझे लगता है कि दोनों ही मामलों में आप समान आसानी से पोर्टेबल कोड लिख सकते हैं। यही है, आप कोड लिख सकते हैं और यह आमतौर पर विभिन्न प्लेटफार्मों पर काम करेगा। लेकिन आप सिर्फ कोड लिखने और यह मानकर नहीं चल सकते कि यह हर जगह काम करेगा। मैंने एक अजगर परियोजना पर काम किया है जो विंडोज, लिनक्स और मैक के लिए संस्करण का उत्पादन करती है और हम बहुत कम क्रॉस प्लेटफॉर्म मुद्दों में भाग लेते हैं। (केवल मुझे याद है कि लाइब्रेरी में एक बग के कारण हम pygame का उपयोग कर रहे थे, जो लिनक्स पर मुद्दों को आकर्षित करता था। यह हमारे द्वारा उपयोग किए जाने वाले pygame के संस्करण को अपग्रेड करके तय किया गया था)

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

अंत में, मुझे लगता है कि यह नीचे आता है कि आपको किस भाषा के साथ काम करना पसंद है और आपको किस तरह की तैनाती की आवश्यकता है।


18

जबकि जावा या केवल व्यवहार्य क्रॉस-प्लेटफ़ॉर्म टूल नहीं हो सकता है , इसमें कुछ ताकतें हैं:

  • यह बहुत तेज है।
  • यह बेहद मजबूत है।
  • यह अत्यंत पोर्टेबल है (उदाहरण के लिए Windows में 95 साल पहले संकलित bytecode OS X में आज ठीक चलता है)।

और कुछ कमजोरियाँ:

  • कोर जीयूआई पुस्तकालयों (स्विंग ...) उनकी उम्र दिखा रहे हैं (3 पार्टी की अतिरिक्त मदद यहाँ)।
  • भाषा स्वयं कम क्रिया हो सकती है (उदाहरण के लिए जाँच अपवाद ...)।
  • स्टार्टअप समय स्नैपर हो सकता है (हालांकि यह हर समय सुधार कर रहा है)।

जब प्लेटफ़ॉर्म जावा के बारे में विशेष रूप से बात कर रहे हैं , तो एक बिंदु और है:

  • कर रहे हैं काफी कुछ भाषाओं JVM और पर चलने वाले interoperate जावा के साथ।

19
बहुत ज़्यादा तेज़? क्या तुलना?
हार्डकोड

18
@ हर्डकोड: किसी भी व्याख्या की गई भाषा या सबसे संकलित भाषाओं की तुलना में। C और C ++ को कुछ मामलों में तेजी से बनाया जा सकता है, लेकिन यह कठिन है, और कोर की संख्या बढ़ने पर कठिन होता रहता है। जावा संगति के साथ (उन एकाधिक कोर का कुशलतापूर्वक उपयोग करना) अभ्यास में आसान है।
जूनस पुलकका

5
@ हर्डकोड, जाहिरा तौर पर जेवीएम लगभग किसी भी व्याख्या की गई भाषा के लिए सबसे तेज़ रनटाइम है (जैसा कि हैकर्स ने खुद को बनाया है) के

14

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

हमारे उत्पाद में एक जावा सर्वर है जो विंडोज या लिनक्स पर चलेगा लेकिन हमने इसके साथ ओएस विशिष्ट मुद्दों को देखा है और सुनिश्चित करें कि हमारे पास आवश्यक होने पर समर्थन / परीक्षण के लिए लिनक्स और विंडोज दोनों सर्वर उपलब्ध हैं। जावा UI में सर्वरों की तुलना में अधिक समस्याएँ होती हैं (हालांकि कई कॉस्मेटिक हैं और इसलिए एप्लिकेशन के आधार पर संभावित रूप से इसे अनदेखा किया जा सकता है)।

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

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


8
अच्छा उत्तर। बेशक, यह सुनिश्चित करना कि आपका ऐप सभी विभिन्न ब्राउज़र संस्करणों में सही काम करता है, साथ ही सिरदर्द भी हो सकता है।
टिम गुडमैन

5
@ समय: अच्छा बिंदु। मेरा मानना ​​है कि जावा डेस्कटॉप ऐप्स की तुलना में ब्राउज़र ऐप्स बहुत अधिक "हर जगह परीक्षण और डिबग" होते हैं।
जूनास पुलका

5
@ समय: +1 सभी प्रमुख ब्राउज़रों में समान कार्य करने के लिए एक वेब ऐप प्राप्त करना उतना ही कठिन है जितना कि एक जावा ऐप को एकाधिक ओएस पर समान रूप से कार्य करना।
येवगेनी ब्रिकमैन

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

2
@ मिकेरा - हमने लिनक्स और विंडोज के बीच मुद्दों को देखा है जिनका हमारे कोड से कोई लेना-देना नहीं था। वे दुर्लभ हैं, लेकिन वे मौजूद हैं।
जॉन हॉपकिंस

9

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

  • जब तक आपके अपने आश्रितों से सावधान रहते हैं (जैसे कि पुस्तकालयों से बचना जो देशी कोड के साथ इंटरफेस के लिए जेएनआई का उपयोग करते हैं) तब जावा को सभी प्रमुख जेवीएम प्लेटफार्मों पर अनमॉडिफाइड लिखा जा सकता है

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

  • बहुत सारे मुख्य पुस्तकालयों की आपको ज़रूरत होती है (GUI, नेटवर्किंग, IO इत्यादि) मानक रनटाइम का हिस्सा होते हैं और क्रॉस-प्लेटफ़ॉर्म तरीके से लिखे जाते हैं। तो आपको क्रॉस-प्लेटफ़ॉर्म लाइब्रेरीज़ के लिए शिकार करने और परीक्षण करने की ज़रूरत नहीं है, आपको गारंटी दी जाती है कि आपको जो कुछ भी ज़रूरत है वह बहुत पहले से ही रनवे के माहौल में है।


3

मुझे लगता है कि आपके पास वे विकल्प हैं:

1) या तो एक का उपयोग करें

  • संकलित या
  • व्याख्या की गई भाषा।

2) आप अपने कोड को कैसे पैकेज और वितरित करेंगे?

  • एक "फ्रंट-एंड", एक बाइनरी / स्क्रिप्ट?
  • एक "फ्रंट-एंड", कई बायनेरिज़ / स्क्रिप्ट?
  • कई "फ्रंट-एंड", कई बायनेरिज़ / स्क्रिप्ट?

वे विकल्प प्रदर्शन, सूअर कोड दृश्यता और वितरण को प्रभावित करते हैं।

क्या आपको अपना सोर्स कोड देने का मन है? संकलित भाषाएं आपके लिए हो सकती हैं। संकलित भाषाओं की व्याख्या (यहां तक ​​कि JITed) भाषाओं की तुलना में सूक्ष्म-बेंचमार्क में बेहतर प्रदर्शन होता है। यदि आप जावा, पायथन, रूबी आदि जैसे रनटाइम वातावरण पर निर्भर करते हैं, तो आपके कोड को वितरित करना कठिन हो सकता है।

मैंने पाया कि सबसे लोकप्रिय क्रॉस-प्लेटफ़ॉर्म डेस्कटॉप एप्लिकेशन "वन फ्रंट-एंड, मल्टीपल बायनेरीज़" के लिए C / C ++ और क्रॉस-प्लेटफॉर्म विजेट लाइब्रेरी, उदाहरण के लिए, एयूडेसिटी, ब्लेंडर, फ़ायरफ़ॉक्स, गूगल अर्थ, ओपनऑफ़िस, स्काइप, सॉन्गबर्ड, स्टेलेरियम का उपयोग करते हैं। वीएलसी।


आपने अपने उदाहरणों में Skype को सूचीबद्ध करने में एक दिलचस्प त्रुटि की, लेकिन इस सुपर-लोकप्रिय एप्लिकेशन को वास्तव में विंडोज पर डेल्फी / पास्कल के साथ शुरू किया गया था और MacOS / iPhone पर लिनक्स और उद्देश्य-सी पर C / C ++ के साथ पोर्ट किया गया था
Maksee

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

0

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

-edit- मैंने सुना है कि LLVM लोकप्रिय हो रहा है, लेकिन अभी भी बहुत छोटा है। यह आपको एक ही बाइनरी में क्रॉस प्लेटफॉर्म C ++ का उपयोग करने की अनुमति देगा। जाहिरा तौर पर इसे ब्राउज़र पर निष्पादित किया जाएगा, लेकिन मैंने एक उदाहरण देखा जहां यह आपको डोम को संशोधित करने या जावास्क्रिप्ट को कॉल करने की अनुमति देता है।


LLVM एक ब्राउज़र पर चलने के बारे में नहीं है ... क्या आप emscripten के बारे में बात कर रहे हैं?
कैमिलो मार्टिन

तारीख जांचें। 4 साल पहले एम्सस्क्रिप्टेन मौजूद नहीं था। NativeClient को काम करने के लिए माना जाता था (और कयामत चल रही थी) लेकिन ऐसा नहीं हुआ।

अब मैं तारीख देखता हूं, लेकिन फिर भी, एलएलवीएम विशेष रूप से ब्राउज़रों के बारे में कभी नहीं था, है ना?
कैमिलो मार्टिन

1
नहीं। हालाँकि मेरी इच्छा है कि मैं JS के बजाय C ++ या कोई अन्य भाषा LLVM का समर्थन


-1

यदि आप मिक्स में मोबाइल प्लेटफ़ॉर्म लाते हैं तो आपको कम से कम recompile को भी शामिल करना होगा। जैसे कि android, j2me।

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