स्काला और ग्रूवी के बीच मुख्य अंतर क्या हैं? [बन्द है]


128

सतह पर ग्रूवी और स्काला बहुत समान दिखते हैं, एक तरफ स्कैला से स्टेटिक टाइप किया जाता है, और ग्रूवी गतिशील।

  • अन्य प्रमुख अंतर क्या हैं, और प्रत्येक के फायदे दूसरे पर हैं?
  • वे वास्तव में कैसे समान हैं?
  • क्या दोनों के बीच प्रतिस्पर्धा है?
    • यदि हां, तो आपको क्या लगता है कि लंबे समय में कौन जीतेगा?

Groovy 2.0 में स्थैतिक टाइपिंग भी शामिल है: infoq.com/articles/new-groovy-20
HDave

जवाबों:


230

वे JVM के लिए दोनों ऑब्जेक्ट ओरिएंटेड भाषाएं हैं जिनमें लैम्ब्डा और क्लोजर हैं और जावा के साथ इंटरप्रेट हैं। इसके अलावा, वे बेहद अलग हैं।

ग्रूवी एक "गतिशील" भाषा है न केवल इस अर्थ में कि यह गतिशील रूप से टाइप किया गया है, बल्कि यह गतिशील मेटा-प्रोग्रामिंग का समर्थन करता है।

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

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

Scala, रूबी और जावा दोनों से प्रभावित है। यह जावा, एसएमएल, हास्केल, और जीबेटा नामक एक बहुत ही अस्पष्ट ओओ भाषा से अधिक प्रभावित है।

ग्रूवी के पास "एक्सिडेंटल" मल्टीपल डिस्पैच है जिस वजह से यह जावा ओवरलोडिंग को संभालता है।

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

स्काला और ग्रूवी दोनों मिश्रण के साथ एकाधिक वंशानुक्रम के एक रूप का समर्थन करते हैं (हालांकि स्काला उन्हें लक्षण कहते हैं)।

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

स्काला डायरेक्ट टेल रिकर्सन ऑप्टिमाइज़ेशन करता है। मुझे विश्वास नहीं होता कि ग्रूवी करता है। यह कार्यात्मक प्रोग्रामिंग में महत्वपूर्ण है, लेकिन अनिवार्य प्रोग्रामिंग में कम महत्वपूर्ण है।

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

स्काला में "समझ के लिए" है, अन्य भाषाओं में पाई जाने वाली सूची की समझ का एक सामान्यीकरण (तकनीकी रूप से वे मोनड समझ हैं, थोड़ा - कहीं हास्केल के और सी # लिन्क के बीच)।

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

ग्रोवी जिस तरह से करते हैं, स्काला ने अंकगणित ऑपरेटरों के चयन में नहीं बनाया है। स्काला में आप बहुत लचीले तरीके से नाम रख सकते हैं।

ग्रूवी के पास शून्य से निपटने के लिए एल्विस ऑपरेटर है। स्काला प्रोग्रामर शून्य का उपयोग करके विकल्प प्रकारों का उपयोग करना पसंद करते हैं, लेकिन यदि आप चाहते हैं तो स्काला में एल्विस ऑपरेटर लिखना आसान है।

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

मुझे यकीन है कि कई, कई अंतर हैं जो मैंने कवर नहीं किए हैं। लेकिन उम्मीद है कि यह आपको एक संकेत देता है।

क्या उनके बीच प्रतिस्पर्धा है? हां, निश्चित रूप से, लेकिन जितना आप सोच सकते हैं उतना नहीं। ग्रूवी की असली प्रतियोगिता JRuby और Jython है।

कौन जीतने वाला है? मेरी क्रिस्टल बॉल उतनी ही फटी है जितनी किसी और की।


21
यह दोनों के लिए एक जीत होगी अगर कोई विश्वविद्यालयों को सिर्फ जावा = के बजाय इन भाषाओं को पढ़ाने के लिए शुरू कर सकता है)
Chii

13
क्या Scala की एक प्रमुख विशेषता अपरिवर्तनीयता नहीं है? संगोष्ठी और अभिनेताओं के बारे में क्या? हमें कुछ और बताएं ...
लियोनेल

4
अगर कोई प्रतियोगिता है तो यह क्लूजुर के साथ होगी, लेकिन क्लजुरे को प्रतियोगिता में दिलचस्पी नहीं है।
रेयन

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

4
चूँकि इस उत्तर में बहुत सारे वोट हैं, इसलिए एक भाग मैं सही करना चाहूंगा। यह सही है कि ग्रूवी में विरासत आधारित मल्टीमिथोड्स दुर्घटना के रूप में शुरू हुए, लेकिन ग्रूवी डेवलपर्स सम्मेलन में, जिसमें जेम्स भी शामिल था और ग्रूवी 1.0 से बहुत पहले हमने इसे रखने का फैसला किया था। इसे बदलना मुश्किल नहीं होगा। जेम्स ने जो लिखा है, उसे जोड़ने के लिए ... आह्वान करने वाले ने उस बाधा को नीचे ले लिया, जिसके बारे में वह बात कर रहा है
blackdrag

12

scala का मतलब एक oo / कार्यात्मक संकर भाषा है और इसे बहुत अच्छी तरह से योजनाबद्ध और डिज़ाइन किया गया है। groovy अधिक संवर्द्धन के एक सेट की तरह है जो कई लोगों को जावा में उपयोग करना पसंद करेंगे। मैं दोनों पर करीब से देखा, तो मैं बता सकता हूँ :)

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


11

स्काला में एक्टर्स हैं, जो कंसीडर को लागू करने में बहुत आसान बनाते हैं। और लक्षण जो सच देते हैं, कई प्रकार की विरासत देते हैं।


9
भविष्य के संदर्भ के लिए, ग्रोवी जीपर्स या अक्का के माध्यम से करता है।
Xorlev

4
भविष्य के संदर्भ के लिए, गुण के माध्यम से ग्रूवी करता है
vicsz

1
ठीक है, नहीं किसी भी अधिक: docs.scala-lang.org/overviews/core/actors-migration-guide.html
morty

7

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

स्केल इम्प्लीमेंट्स की सूची थोड़ी अलग है; ग्रूवी में, सब कुछ java.util.List का एक उदाहरण है, जबकि स्काला लिस्ट और आदिम सरणियों दोनों का उपयोग करता है। ग्रूवी के पास (मुझे लगता है) बेहतर स्ट्रिंग प्रक्षेप है।

स्काला तेज है, ऐसा लगता है, लेकिन ग्रूवी लोग वास्तव में 2.0 रिलीज के लिए प्रदर्शन को आगे बढ़ा रहे हैं। १.६ ने १.५ श्रृंखला से अधिक गति में एक बड़ी छलांग दी।

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


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

10
स्काला एक गतिशील भाषा नहीं है।
जॉन ऑक्सले

2
"Groovy है (मुझे लगता है) बेहतर स्ट्रिंग प्रक्षेप।" - स्काला -२.०.० के साथ यह अब सही नहीं है (स्काला को कूल स्ट्रिंग इंटरपोलेशन मिला)।
VasiliNovikov

5

स्कोला में ग्रूवी की तुलना में बहुत अधिक स्टेटर सीखने की अवस्था है। स्काला को अपने पैटर्न मिलान और पूंछ आधारित पुनरावृत्ति के साथ कार्यात्मक प्रोग्रामिंग के लिए बहुत अधिक समर्थन है, जिसका अर्थ शुद्ध एफपी के लिए अधिक उपकरण हैं।


0

स्काला में डायनामिका संकलन भी है और मैंने इसे ट्विटर इवल लिब ( https://github.com/twitter/util ) का उपयोग करके किया है । मैंने एक फ्लैट फ़ाइल (बिना किसी एक्सटेंशन के) में स्कैला कोड रखा और रन टाइम में इवाएल निर्मित स्कैला क्लास का उपयोग किया। मैं कहूंगा कि स्काला मेटा प्रोग्रामिंग है और इसमें गतिशील जटिलता की विशेषता है

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