क्यों ये Xtala और Kotlin के साथ Scala को पानी देने का प्रयास करते हैं? [बन्द है]


26

इसलिए अब एक्लिप्स ने Xtend की पेशकश की है और JetBrains कोटलिन की पेशकश कर रहा है - दोनों को स्कैला के संस्करणों में पानी पिलाया गया लगता है। मेरा सवाल यह है कि क्यों? मैंने स्काला के साथ थोड़ा सा खेला है और यह उतना कठिन नहीं है । क्या यह अनिवार्य से कार्यात्मक तक छलांग की अंतर्निहित कठिनाई की प्रतिक्रिया है या यहां काम पर कुछ और है?


संपादित करें: माफी। जैसा कि मैंने मूल रूप से पोस्ट किया था, इस प्रश्न को फिर से प्रस्तुत करते हुए मैं देख सकता हूं कि यह ट्रोलिंग की तरह थोड़ा सा लगता है। जिस तरह से मैंने सवाल पूछा था वह सवाल पूछने का सबसे अच्छा तरीका था। मैंने ब्लॉग पोस्टिंग को देखा है कि "स्काला बहुत कठिन है / स्काला बहुत जटिल है" और साथ ही "कोटलिन स्कैला लेकिन सरल करने का एक प्रयास है"। मैं यह पूरी तरह से मूल रूप से था, लेकिन मैं ईमानदारी से ट्रोल करने की कोशिश नहीं कर रहा था के रूप में मैं phrasing छोड़ दूँगा।


20
यह मुझे लगता है कि स्केला के लिए कुछ समानता है कि एक नई भाषा "स्काला का पानी नीचे संस्करण" होना चाहिए, जिसके लिए स्काला बहुत कठिन है। आपको इस तरह के प्रश्न को प्रस्तुत करके अच्छी तरह से विचार किए गए उत्तर प्राप्त करने की संभावना कम है।
माइकल बोर्गवर्ड

8
असेंबली मशीन कोड का सिर्फ एक पानी नीचे संस्करण है, है ना?
बेन ब्रोका

6
@BenBrocka: नहीं, यह मशीन कोड के लिए

4
स्काला महान है। मेरे लिए, मेरा मानना ​​है कि लोगों को जावा नेक्रोमेंसी और साइकिल को फिर से शुरू करने (उन सभी नई भाषाओं, उल्लेखित और नहीं) को छोड़ देना चाहिए और केवल स्काला का उपयोग और सुधार करना चाहिए। IMHO।
इवान

2
@MichaelBogwardt एक उचित बिंदु। मैं इस बात पर जोर दे रहा हूं कि मैंने ब्लॉग जगत के आसपास क्या देखा है। "स्काला बहुत कठिन है" और "स्काला बहुत जटिल है" अपेक्षाकृत सामान्य शिकायतें लगती हैं।
ओनोरियो कैटेनेशिया

जवाबों:


39

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

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

कहा जा रहा है कि के साथ, लोग एक अपरिचित स्वर्ग पर एक परिचित नरक का चयन करेंगे।


19
+1: "लोग एक अपरिचित स्वर्ग पर एक परिचित नरक का चयन करेंगे"।
जियोर्जियो

18

JetBrains में एक विकी पेज है , जो स्काला की तुलना कोटलिन से करता है, और कुछ चीजें हैं जो कोटलिन करता है और Scala नहीं करता है:

  • शून्य-ओवरहेड नल-सुरक्षा। स्काला में ऑप्शन है, जो एक सिंटैक्टिक और रन-टाइम रैपर है
  • स्मार्ट कास्ट
  • स्थैतिक विस्तार कार्य। बजाय रनटाइम के रैपिंग करते हुए
  • कोटलिन के इनलाइन कार्यों से नॉनोकल जंप की सुविधा मिलती है
  • स्ट्रिंग टेम्पलेट्स। समान कार्यक्षमता वाले स्कैला के लिए 3rd पार्टी कंपाइलर प्लगइन है: ScalaEnhancedStrings
  • प्रथम श्रेणी का प्रतिनिधिमंडल। तीसरे पक्ष के प्लगइन के माध्यम से भी लागू किया गया: ऑटोपॉक्सी मॉड्यूल

इसलिए कोटलिन को स्कैला के नीचे पानी कहना शायद एक ओवरसिम्प्लीफिकेशन है। Xtend के लिए, मुझे लगता है कि यह व्यापक दर्शकों के बजाय ज्यादातर Xtext उपयोगकर्ताओं को लक्षित करता है। स्काला के लिए एक बड़ा अंतर यह है कि Xtend बाइकोडोड के बजाय जावा को संकलित करता है।

एक और "जावा किलर" भाषा जिसे आपको अपनी सूची में जोड़ना चाहिए वह है रेड हैट सीलोन , हालांकि मुझे इस बात का कोई अंदाजा नहीं है कि यह स्कैला से तुलना करता है या नहीं।


13
स्वचालित कास्ट डरावना लगता है।
जोनास

14
उद्योग के पास ये चक्रीय क्रांतियां हैं जहां डेवलपर्स एक चरम से और बार-बार वापस जाएंगे। फीचर रिच पावर कोडर भाषाएं अच्छी थीं, फिर बेवकूफों ने बुरा कोड लिखा और हमने खतरों को पाया ताकि लोग जावा की कथित सुरक्षा के लिए झुके, अब फिर से पावर कोडर्स के पास लौट आए। यह देखें कि जावास्क्रिप्ट और ब्राउज़र आधारित कैसे अच्छा था, फिर एप्लेट्स साथ आए और RIA ब्राउज़र प्लगइन्स अच्छे थे और जावास्क्रिप्ट खराब थे, फिर आधुनिक AJAX फ्रेमवर्क आए और प्लगइन्स असुरक्षित और बुरे थे, फिर सिल्वरलाइट आई और लोगों ने कहा AJAX मर गया, अब HTML5 वोग और प्लगइन्स फिर से खराब है! :)
maple_shaft

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

2
@ जोनास खैर, तकनीकी विकास का केवल एक उच्च उच्च स्तरीय ओवरसिप्लाईफिकेशन एक टिप्पणी में फिट होगा। मैं यद्यपि मेपल_शेष से सहमत हूं, लेकिन तकनीकी विकास में एक पुनरावृत्ति का अनुभव है
यानिस y

3
@ जोनास ये कास्ट ऑटोमैटिक नहीं, बल्कि स्मार्ट कास्ट्स हैं: अगर आप देखेंगे तो आप देखेंगे कि ये समान नहीं है: kotlinlang.org/docs/reference/typecasts.html
cy6erGn0m

11

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

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

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

[विरासत कोड के उल्लेख को हटाने के लिए संपादित, नीचे टिप्पणी देखें]

[२०१: परिशिष्ट: स्काला अब जावास्क्रिप्ट का निर्माण लक्ष्य के रूप में करता है, जबकि कोटलिन ने उन सुविधाओं को जोड़ना जारी रखा है, जो स्केल-जैसे जावा / ग्रूवी / जावास्क्रिप्ट प्रतिस्थापन के लिए समझ में आता है। जब मैंने पहली बार यह लिखा था तो वे अब अधिक विशिष्ट भाषाएँ हैं।]


क्या आप कृपया "लैगसी पार्ट" को थोड़ा और विस्तृत कर सकते हैं? उदाहरण के लिए, आपको किन तरीकों से मतलब है कि Seq के बजाय Lists लें?
kiritsuku

मैं इसे संपादित करने जा रहा हूं, प्रतिबिंब के बाद से, मानक स्काला लाइब्रेरी वास्तव में शायद ही कभी ऐसा करती है। JSONArray एक सूची लेता है, लेकिन अधिकांश निर्माणकर्ता नहीं करते हैं। भले ही, अभी भी सूची में एक पूर्वाग्रह है, सूचियों की ओर, विशेष रूप से स्कैला में प्रोग्रामिंग के बाद से, 2 डी संस्करण, केवल स्कैला 2.8 को कवर करता है, जो वैक्टर से पहले होता है। और इसके कोड उदाहरण में कंस्ट्रक्टर होते हैं जो लिस्ट लेते हैं जहां Seq बेहतर होगा।
डेविड लेपिक

हाँ, 2.10 के लिए कुछ चीजें बेहतर हैं ( +:उदाहरण के लिए एक्सट्रैक्टर्स)। मुझे आशा है कि निकट भविष्य में स्काला में प्रोग्रामिंग को अपडेट किया जाएगा। 2.11 के लिए कुछ चीजों में और सुधार होता है। स्टैडलिब को पहले ही डिप्रेसेशन से मुक्त कर दिया गया है और यह थोड़ा सिकुड़ भी जाएगा। शायद scala.util.parsingstdlib के बाहर भी ले जाया जाएगा। हम देखेंगे ...
kiritsuku

1
मुझे यह जोड़ना चाहिए कि सूचियों बनाम क्षेत्रों के साथ मेरी वास्तविक समस्या यह है कि एक सूची में आइटम जोड़ना (यानी स्काला में Seq) एक बहुत ही बुनियादी ऑपरेशन है, और इसे करने के लिए बहुत सारे समान तरीके हैं, सभी मज़ेदार प्रतीकों के साथ हैं जो कठिन हैं याद है। विहित तरीका है ::, ::=या +:=जो प्रीपेंड करता है, लेकिन ज्यादातर लोग चाहते हैं कि :+=कौन सा एपेंड करें, लेकिन वह सूची के लिए कुशल नहीं है।
डेविड लेपिक

10

JetBrains ने कोटलिन के लिए अपने उद्देश्यों को बहुत स्पष्ट रूप से बताया है :

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


8

मैंने प्ले फ्रेम के साथ ग्रहण में कुछ महीनों में स्काला का उपयोग किया है। मुझे भाषा पसंद है लेकिन ऐसी चीजें भी हैं जो मुझे पसंद नहीं हैं।

मेरे लिए, जावा से दूसरी भाषा में स्विच करने का कारण अधिक उत्पादक होना है।

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


2
हो सकता है कि आपने पर्याप्त स्काला मुहावरों को नहीं सीखा हो। मैंने छोटे प्रोजेक्ट्स (टूल्स) के लिए स्काला का उपयोग किया है और मैं स्कैला में जावा की तुलना में कहीं अधिक उत्पादक हूं, हालांकि मुझे स्कैला (<2 वर्ष) की तुलना में जावा (> 10 वर्ष) में अधिक अनुभव है।
जियोर्जियो

4

कोटलिन के बारे में नहीं जानते, लेकिन स्काला और Xtend दो बहुत अलग जानवर हैं।

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

Xtend एक बेहतर जावा है। यह जावा शब्दार्थ रखता है और इसके वाक्य विन्यास को बढ़ाता है। Xtend कोड की हर लाइन सीधे java लाइनों के एक समूह में अनुवादित की जा सकती है। कोई अतिरिक्त रनटाइम नहीं है, न ही।

मुझे लगता है कि दोनों दृष्टिकोण सही हैं, हालांकि अलग हैं। मैं स्काला को नापसंद नहीं करता (एक भाषा के रूप में), लेकिन स्काला जार को मेरी परियोजनाओं में शामिल करना पसंद नहीं है। मैं Android में Scala का उपयोग ठीक से नहीं कर सकता, न तो (यह वजन और प्रदर्शन के मुद्दों को जोड़ता है)। Xtend के रूप में ज्यादा चित्रित नहीं है, लेकिन यह मेरे लिए ठीक है (जावा भाषा की तुलना में इसका उपयोग करने लायक है) और यह हर मंच पर काम करता है जैसे कि मैं सीधे जावा में लिख रहा था।

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

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

और ग्रहण का समर्थन शानदार है ...


... और यह केवल ग्रहण में समर्थित है। सही? और ग्रहण एक नरक है ...
सर्ज बोर्स्च

Xtend में एक अतिरिक्त रनटाइम होता है। लगभग 3 एमबी अंतिम मैंने जाँच की।
mm2001

@ mm2001 हां निर्भरताएं हैं: xtend के लिए लगभग 300 Ko और मेरे छोटे परीक्षण प्रोजेक्ट पर अमरूद के लिए 2 Mo ( github.com/pdemanget/examples/tree/master/xtend/message-send ) लेकिन यह रनटाइम नहीं है, thes हैं इनपुटऑटपुट जैसी चीजों के लिए अतिरिक्त वर्ग, इसके अतिरिक्त एनोटेशन। यह मेरे लिए मुख्य बिंदु को नहीं हटाता है कि स्काला और Xtend 2 बहुत अलग भाषाएं हैं जैसा कि इस उत्तर में कहा गया है।
pdem
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.