स्काला बनाम ग्रूवी बनाम क्लजुरे [बंद]


676

क्या कोई स्काला, ग्रूवी और क्लोजर के बीच के प्रमुख अंतरों को समझा सकता है। मैं इनमें से प्रत्येक संकलन को JVM पर चलाने के लिए जानता हूं, लेकिन मैं उनके बीच एक साधारण तुलना करना चाहूंगा।

जवाबों:


873

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

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

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

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

क्लोजर, यहां तक ​​कि कुछ बहुत ही दिलचस्प सुविधाओं पर छूट, जेवीएम पर एक लिस्प बोली होने के नाते एक मजबूत अपील है। यह अपनी लोकप्रियता को सीमित कर सकता है, प्रदान किया जा सकता है, लेकिन मुझे उम्मीद है कि इसके पास लंबे समय तक वफादार समुदाय रहेगा।

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

अंतिम प्रकटीकरण के रूप में, मैं स्काला से बहुत परिचित हूं, और केवल अन्य दो से परिचित हूं।


1
अच्छा है। हालाँकि मुझे कहना होगा कि स्काला में लाइटबेंड कॉर्पोरेट बैकिंग है और इसका उपयोग लिंक्डइन, ट्विटर, स्पार्क और बहुत सारे बैंकों द्वारा किया जाता है। जहां मैं काम करता हूं, हमारे पास स्काला की 11 मिलियंस लाइनों का एक कोडबेस है, जो एक अच्छा विचार नहीं है, लेकिन यह काम करता है।
Joan

219

स्काला

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

इसका अधिकांश हिस्सा पिज़्ज़ा भाषा के साथ मार्टिन ओडस्की के पूर्व काम पर आधारित था । OO / FP का एकीकरण केवल नज़दीकियों से परे जाता है और इसने भाषा को पोस्ट-फंक्शनल के रूप में वर्णित किया है।

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

ग्रूवी

ग्रूवी स्पष्ट रूप से जावा की दो सबसे बड़ी आलोचनाओं से निपटता है

  • गतिशील रूप से टाइप किया जा रहा है, जो बहुत सारे बॉयलरप्लेट निकालता है और
  • भाषा में क्लोजर जोड़ना।

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

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

Clojure

क्लोजर LISP परिवार में एक कार्यात्मक भाषा है, यह गतिशील रूप से टाइप किया गया है।

STM सपोर्ट जैसे फीचर्स इसे कुछ बेहतरीन आउट-ऑफ-द-बॉक्स कंजर्वेशन सपोर्ट देते हैं, जबकि स्काला को इसे डुप्लिकेट करने के लिए अक्का जैसी 3-पार्टी लाइब्रेरी की आवश्यकता होती है ।

सिंथेटिक रूप से, यह विशिष्ट जावा कोड से तीन भाषाओं का सबसे दूर भी है।

मुझे यह भी बताना होगा कि मैं स्काला से सबसे अधिक परिचित हूँ :)


11
मैंने इस फ़नल भाषा के बारे में पहले कभी नहीं सुना। ऐतिहासिक रिकॉर्ड में थोड़ा अंतर भरने के लिए धन्यवाद।
रान्डेल शुल्ज़

8
आप वास्तव में क्लोजर को एक शुद्ध कार्यात्मक भाषा नहीं कह सकते । यह निश्चित रूप से अनिवार्य कोड लिखने के लिए संभव है।
dbyrne

2
स्काला ने अभिनेता आधारित संगोष्ठी के लिए अक्का पुस्तकालय में निर्माण किया है। यह अब एक 3 पार्टी निर्भरता नहीं है।
स्कॉट एम गार्डनर

2
@ ऑउबेल बाइटकोड में, एक स्कैला क्लास समान जावा वर्ग - प्रकार और सभी के समान है। एक बिंदु के रूप में, पूरे अक्का जावा एपीआई को स्काला में लिखा गया है। तो कृपया समझाएं कि आपके द्वारा "एकीकृत" नहीं किया जा सकता है, इसका क्या मतलब है - क्योंकि यह मुझे FUD की तरह पढ़ता है।
केविन राइट

3
उस दस्तावेज़ को संक्षेप में प्रस्तुत करने के लिए: "जावा में मौजूद नहीं है जो स्काला सुविधाएँ सीधे जावा में उपयोग नहीं की जा सकती हैं"। हालांकि ... सार प्रकार के सदस्य और उच्च-प्रकार के प्रकार काफी उन्नत विशेषताएं हैं जिन्हें आप निश्चित रूप से उपयोग करने के लिए मजबूर नहीं हैं! जावा भी Groovy से मापदंडों, बिल्डरों या एक्सटेंशन मॉड्यूल के बिना तरीकों का उपयोग नहीं कर सकता है, इस प्रकार Groovy को "अपनी परिभाषा द्वारा" कसकर एकीकृत नहीं "बना रहा है।
केविन राइट

68

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

"हालांकि मेरी टिप हालांकि जेवैक के दीर्घकालिक प्रतिस्थापन के लिए स्काला है। मैं इससे बहुत प्रभावित हूं! मैं ईमानदारी से कह सकता हूं कि अगर किसी ने मुझे मार्टिन ओडस्की, लेक्स स्पून और बिल वेनर्स द्वारा 2003 में स्कैला पुस्तक में प्रोग्रामिंग दिखाया था। "शायद ग्रूवी ने कभी नहीं बनाया है।"

आप पूरी कहानी यहां पढ़ सकते हैं


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

31
और यह देखते हुए कि जेम्स स्ट्रेचन कोटलिन भाषा पर सक्रिय रूप से काम कर रहे हैं, स्काला जाहिर तौर पर उनके लिए पर्याप्त प्रभावशाली नहीं है।
bdkosher

6
@bdkosher वह इस पर काम कर रहा है क्योंकि स्काला सबसे अधिक प्रोग्रामर के लिए बहुत प्रभावशाली है ... और [अधिक महत्वपूर्ण रूप से,] कुछ जगहों पर बहुत जटिल भी,
प्रदर्शन नाम

30

वे अलग-अलग हो सकते हैं जहां से वे आ रहे हैं या जो डेवलपर्स वे मुख्य रूप से लक्षित कर रहे हैं।

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

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

क्लोजर लिस्प प्रोग्रामिंग भाषा की एक बोली है इसलिए लिस्प, स्कीम या हास्केल डेवलपर्स इस भाषा के साथ विकास करते समय घर पर महसूस कर सकते हैं।


24
स्काला वास्तव में एक कार्यात्मक प्रोग्रामिंग भाषा नहीं है। यह पहले कार्यात्मक विशेषताओं के साथ एक वस्तु उन्मुख प्रोग्रामिंग भाषा है।
डैनियल सी। सोबरल

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

21
स्काला एक अनिवार्य भाषा है जिसमें कुछ कार्यात्मक विशेषताएं हैं। अगर लोग कार्यात्मक भाषा से मुहावरों को अपनाते हुए किसी भाषा को कार्यात्मक कहते रहेंगे, तो यह शब्द सिर्फ एक और विपणन शब्द बन जाएगा। साथ ही साथ C ++ फंक्शनल और हास्केल अनिवार्य कहना शुरू कर सकते हैं।
जॉन-हॉनसन

9
@alanlcode Odersky जो चाहे कह सकता है। स्काला में साइड इफेक्ट्स को अलग करने के लिए कोई सिस्टम नहीं है, यह डिफ़ॉल्ट रूप से आलसी नहीं है, और कोड को डेटा के रूप में नहीं मानता है - यह फ़ंक्शन कॉल को डेटा के रूप में मानता है , जो कि अलग है। यदि आप पूरी तरह से कार्य करना चाहते हैं तो ये बड़ी समस्याएं हैं। दूसरी ओर, Scala यह सुनिश्चित करने के लिए अपने ऑब्जेक्ट मॉडल को त्रुटिपूर्ण नहीं करता है। मुझे स्काला बहुत पसंद है, लेकिन यह स्पष्ट रूप से कार्यात्मक दूसरा है।
डैनियल सी। सोबरल

7
दूसरी ओर, भाषाओं के एमएल परिवार को कार्यात्मक माना जाता है, लेकिन यह सख्त है और साइड इफेक्ट्स / अनिवार्य कोड की अनुमति देता है।
GClaramunt

8

मैं स्कॉट डेविस, कॉपीराइट 2008 द्वारा प्रैग्मेटिक प्रोग्रामर्स की किताब "ग्रूवी रेसिपीज: ग्रॉसिंग ऑफ द जावा" पढ़ रहा हूं और उसी साल अप्रैल में छपी है।

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


ग्रूवी सीखने के लिए यह सबसे अच्छी किताब है।
topr

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

4

जाहिर है, वाक्यविन्यास पूरी तरह से अलग है (ग्रूवी जावा के सबसे करीब है), लेकिन मुझे लगता है कि वह नहीं है जो आप के लिए पूछ रहे हैं।

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


मैं स्क्रिप्ट जावा के लिए स्काला का उपयोग करने के बारे में आपकी बात नहीं समझता। आप निश्चित रूप से एक स्कैला स्क्रिप्ट लिख सकते हैं जो जावा कोड चलाती है; कोई evalआवश्यकता नहीं है।
डैनियल यांकोव्स्की

2
@ डैनियल, कृपया स्क्रिप्ट के लिए स्कैला का उपयोग करने के बारे में प्रश्न देखें जिसे मैंने जोड़ा था। वहाँ स्वीकृत उत्तर यह है कि "ईवैल" सुविधा और javax.scripting समर्थन की कमी से स्कैला का उपयोग जावा एप्लिकेशन को स्क्रिप्ट करने के लिए करना मुश्किल हो जाता है, फिर यह ग्रूवी कहते हैं।
थिलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.