वे JVM के लिए दोनों ऑब्जेक्ट ओरिएंटेड भाषाएं हैं जिनमें लैम्ब्डा और क्लोजर हैं और जावा के साथ इंटरप्रेट हैं। इसके अलावा, वे बेहद अलग हैं।
ग्रूवी एक "गतिशील" भाषा है न केवल इस अर्थ में कि यह गतिशील रूप से टाइप किया गया है, बल्कि यह गतिशील मेटा-प्रोग्रामिंग का समर्थन करता है।
स्काला एक "स्टैटिक" भाषा है जिसमें यह वैधानिक रूप से टाइप किया गया है और इसमें जावा में आपके द्वारा किए जा रहे अजीब सामान से परे कोई गतिशील मेटा-प्रोग्रामिंग नहीं है। ध्यान दें, स्काला की स्थैतिक प्रकार प्रणाली जावा की तुलना में काफी अधिक समान और परिष्कृत है।
ग्रूवी जावा से वाक्यगत रूप से प्रभावित होता है लेकिन रूबी जैसी भाषाओं द्वारा शब्दार्थ से अधिक प्रभावित होता है।
Scala, रूबी और जावा दोनों से प्रभावित है। यह जावा, एसएमएल, हास्केल, और जीबेटा नामक एक बहुत ही अस्पष्ट ओओ भाषा से अधिक प्रभावित है।
ग्रूवी के पास "एक्सिडेंटल" मल्टीपल डिस्पैच है जिस वजह से यह जावा ओवरलोडिंग को संभालता है।
स्काला केवल एकल प्रेषण है, लेकिन एसएमएल प्रेरित पैटर्न से मेल खाती है, जिसमें कुछ इसी तरह की समस्याओं से निपटने के लिए कई प्रेषण को संभालने के लिए है। हालाँकि, जहाँ कई प्रेषण केवल रनटाइम प्रकार पर प्रेषण कर सकते हैं, स्काला का पैटर्न मिलान रनटाइम प्रकार, मान, या दोनों पर भेज सकते हैं। पैटर्न मिलान में सिंथेटिक रूप से सुखद चर बंधन भी शामिल है। यह अंदाजा लगाना कठिन है कि अकेला यह फीचर स्कैला में प्रोग्रामिंग को कितना सुखद बनाता है।
स्काला और ग्रूवी दोनों मिश्रण के साथ एकाधिक वंशानुक्रम के एक रूप का समर्थन करते हैं (हालांकि स्काला उन्हें लक्षण कहते हैं)।
स्काला, आंशिक स्तर के अनुप्रयोग का समर्थन करता है और भाषा स्तर पर करीने का समर्थन करता है, ग्रूवी के पास आंशिक कार्य अनुप्रयोग करने के लिए एक अजीब "करी" विधि है।
स्काला डायरेक्ट टेल रिकर्सन ऑप्टिमाइज़ेशन करता है। मुझे विश्वास नहीं होता कि ग्रूवी करता है। यह कार्यात्मक प्रोग्रामिंग में महत्वपूर्ण है, लेकिन अनिवार्य प्रोग्रामिंग में कम महत्वपूर्ण है।
स्काला और ग्रूवी दोनों का डिफ़ॉल्ट रूप से उत्सुकता से मूल्यांकन किया जाता है। हालाँकि, स्काला कॉल-बाय-नेम मापदंडों का समर्थन करता है। ग्रूवी नहीं करता है - कॉल-बाय-नाम को बंद होने के साथ अनुकरण किया जाना चाहिए।
स्काला में "समझ के लिए" है, अन्य भाषाओं में पाई जाने वाली सूची की समझ का एक सामान्यीकरण (तकनीकी रूप से वे मोनड समझ हैं, थोड़ा - कहीं हास्केल के और सी # लिन्क के बीच)।
स्काला के पास "स्थिर" फ़ील्ड, आंतरिक कक्षाएं, विधियों आदि की कोई अवधारणा नहीं है - यह इसके बजाय सिंगलटन ऑब्जेक्ट्स का उपयोग करता है। ग्रूवी स्थिर अवधारणा का उपयोग करता है।
ग्रोवी जिस तरह से करते हैं, स्काला ने अंकगणित ऑपरेटरों के चयन में नहीं बनाया है। स्काला में आप बहुत लचीले तरीके से नाम रख सकते हैं।
ग्रूवी के पास शून्य से निपटने के लिए एल्विस ऑपरेटर है। स्काला प्रोग्रामर शून्य का उपयोग करके विकल्प प्रकारों का उपयोग करना पसंद करते हैं, लेकिन यदि आप चाहते हैं तो स्काला में एल्विस ऑपरेटर लिखना आसान है।
अंत में, झूठ हैं, लानत झूठ हैं, और फिर बेंचमार्क हैं। कंप्यूटर भाषा के बेंचमार्क गेम स्काला को ग्रूवी की तुलना में काफी तेज गति के बीच रखते हैं (दो बार से 93 गुना तेज तक) जबकि लगभग उसी स्रोत आकार को बरकरार रखते हुए। बेंचमार्क ।
मुझे यकीन है कि कई, कई अंतर हैं जो मैंने कवर नहीं किए हैं। लेकिन उम्मीद है कि यह आपको एक संकेत देता है।
क्या उनके बीच प्रतिस्पर्धा है? हां, निश्चित रूप से, लेकिन जितना आप सोच सकते हैं उतना नहीं। ग्रूवी की असली प्रतियोगिता JRuby और Jython है।
कौन जीतने वाला है? मेरी क्रिस्टल बॉल उतनी ही फटी है जितनी किसी और की।