Clojure, Scheme / Racket और Common Lisp में क्या अंतर हैं?


120

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


3
मैं मतभेदों का अधिक सामान्य अवलोकन करने के लिए कह रहा हूं क्योंकि मैं इस तरह गिर गया था कि यह प्रश्न कई अन्य लोगों के लिए उपयोगी हो सकता है, क्षमा करें यदि यह अपमानजनक लगता है।
— MaiaVictor

4
मैं हमेशा असमंजस में रहता हूं कि किस पोस्ट पर कहां जाऊं। यह उपकरणों की चर्चा है, तो क्या यह यहाँ या प्रोग्रामर के लिए एक प्रश्न है? तार्किक रूप से, मैं कहूंगा कि इसे प्रोग्रामर के पास ले जाएं, क्योंकि यह किसी विशेष समस्या को हल करने के लिए नहीं कह रहा है, लेकिन यह एक अच्छा जवाब IMHO के साथ एक अच्छा पद है।
— ऑक्टोपसग्राबस

1
@octopusgrabbus: प्रश्न बहुत व्यापक है। Features वाक्य रचना, विशेषताओं, विशेषताओं और संसाधनों ’पर तीन प्रोग्रामिंग भाषाओं की तुलना में आसानी से एक किताब या एक वेब साइट भर सकती है। Stackoverflow उन लोगों के लिए है जिन्हें प्रोग्रामिंग समस्याएं हैं, यह एक विश्वकोश (विकिपीडिया) नहीं है, यह एक सामान्य चर्चा मंच (यूज़नेट) नहीं है, यह एक भाषा तुलना साइट ( rosettacode.org ) नहीं है। यह वास्तविक प्रोग्रामिंग समस्या के लिए सबसे अच्छा है जहां प्रश्न में कोड है और उत्तर में कोड भी है। प्लस: किसी से ऊब नहीं है या सिर्फ एक शौक नहीं है, इसलिए समस्याओं का सामना न करें।
— रेनर जोस्विग

3
सिर्फ इसलिए कि प्रश्न व्यापक है इसका मतलब यह नहीं है कि यह यहाँ नहीं है। यह बिल्कुल स्पष्ट प्रश्न है, और यह निश्चित रूप से एक "वास्तविक प्रोग्रामिंग प्रश्न" है। StackOverflow का अर्थ मुख्य रूप से Q & A प्रारूप के माध्यम से प्रोग्रामिंग के बारे में ज्ञान साझा करने के लिए एक [googleable] सामुदायिक संसाधन होना है।
— डैन बर्टन

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

जवाबों:


103

वे सभी में बहुत कुछ है:

  • गतिशील भाषा
  • जोर से टाइप किया हुआ
  • संकलित
  • लिस्प-शैली सिंटैक्स, अर्थात कोड को लिस्प डेटा संरचनाओं (रूपों) के रूप में लिखा जाता है जिसमें सबसे सामान्य पैटर्न फ़ंक्शन कॉल होते हैं: (function-name arg1 arg2)
  • शक्तिशाली मैक्रो सिस्टम जो आपको कोड को डेटा के रूप में व्यवहार करने और रनटाइम पर मनमाना कोड उत्पन्न करने की अनुमति देते हैं (अक्सर नए वाक्यविन्यास के साथ "भाषा का विस्तार करें" या डीएसएल बना सकते हैं)
  • अक्सर कार्यात्मक प्रोग्रामिंग शैली में उपयोग किया जाता है, हालांकि अन्य प्रतिमानों को समायोजित करने की क्षमता है
  • REPL के साथ संवादात्मक विकास पर जोर (यानी आप कोड के रनिंग इंस्टेंस में अंतःक्रियात्मक रूप से विकसित होते हैं)

आम लिस्प विशिष्ट विशेषताएं:

क्लोजर विशिष्ट विशेषताएं:

  • सबसे बड़ा पुस्तकालय पारिस्थितिकी तंत्र, चूंकि आप सीधे किसी भी जावा पुस्तकालयों का उपयोग कर सकते हैं
  • वैक्टर []और नक्शे {}मानक के रूप में मानक सूचियों के अलावा इस्तेमाल किया ()वैक्टर के सामान्य usefullness के अलावा और नक्शे कुछ का मानना है कि यह एक नवीनता जो आम तौर पर अधिक पठनीय बनाता है -
  • कुछ हद तक हास्केल से प्रेरित, अपरिवर्तनीयता और आलसी कार्यात्मक प्रोग्रामिंग पर अधिक जोर
  • भाषा स्तर पर सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी द्वारा समर्थित मजबूत संगामिति क्षमताओं (देखने लायक: http://www.infoq.com/pretations/Value-Identity-State-Rich-Hickey )

योजना विशिष्ट विशेषताएं:

  • संभवतः लिस्प सीखने के लिए सबसे सरल और आसान है
  • हाइजेनिक मैक्रोज़ (देखें http://en.wikipedia.org/wiki/Hygienic_macro ) - मैक्रो विस्तार में आकस्मिक प्रतीक कैप्चर के साथ समस्याओं से बचाता है

11
यह अच्छा है, लेकिन शायद आपको यह उल्लेख करना चाहिए कि रैकेट "सिर्फ" योजना से अधिक है; यह एक ऐसी प्रणाली है जो कई (लेकिन संबंधित) भाषाओं का समर्थन करती है (आप खुद भी परिभाषित कर सकते हैं)। इसके अलावा, क्लोजर में ओओ जैसी प्रोग्रामिंग करने के विभिन्न तरीके हैं (दोनों एक से अधिक डिस्पैच दृष्टिकोण बंद करने के लिए समान हैं और जावा के करीब कुछ ऐसा है जो जेवीएम पर अधिक कुशल है)। और योजना r6rs के साथ अधिक मानक पुस्तकालयों (जिसमें ओओ भी शामिल है) की ओर बढ़ रही है, जो रैकेट का समर्थन करता है।
— andrew cooke

2
"मजबूत रूप से टाइप की गई गतिशील भाषा" विपणन है। इस अर्थ में भी पायथन दृढ़ता से टाइप किया गया है।
— रॉन

16
@ron: अजगर है दृढ़ता से टाइप किया, बस लिस्प की तरह (जैसे कि जावास्क्रिप्ट या VB के विपरीत)। आप "स्थिर टाइपिंग" बनाम "गतिशील टाइपिंग" सोच रहे हैं, इसके बजाय सभी किस्मों के लिए en.wikipedia.org/wiki/Type_system देखें । लेकिन हाँ, यह मार्केटिंग है
— Nas Banov

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

क्लोजर में हाइजीनिक मैक्रो होता है। यहाँ अधिक जानकारी: xivilization.net/~marek/blog/2013/09/09/17/…
— क्रिस्टोफर कुट्रुफ़

50

ऊपर के लोगों ने कुछ चीजों को याद किया

  1. कॉमन लिस्प में वैक्टर और हैश टेबल भी हैं। अंतर यह है कि कॉमन लिस्प वैक्टर के लिए # () और हैश टेबल के लिए कोई सिंटैक्स का उपयोग नहीं करता है। योजना में वैक्टर हैं, मुझे विश्वास है

  2. कॉमन लिस्प में रीडर मैक्रोज़ होते हैं, जो आपको नए कोष्ठक (जैसा कि रैकेट, स्कीम के वंशज) का उपयोग करने की अनुमति देता है।

  3. कॉमन लिस्प के अनहेल्दी लोगों के विपरीत स्कीम और क्लोजर में हाइजेनिक मैक्रोज़ हैं

  4. सभी भाषाएँ या तो आधुनिक हैं या उनमें व्यापक नवीकरण परियोजनाएँ हैं। कॉमन लिस्प ने पिछले पांच वर्षों में व्यापक पुस्तकालयों को प्राप्त किया है (ज्यादातर क्विकलीप के लिए धन्यवाद), योजना में कुछ आधुनिक कार्यान्वयन (रैकेट, चिकन, चेज़ स्कीम, आदि) हैं, और क्लोज़र अपेक्षाकृत हाल ही में बनाया गया था।

  5. आम लिस्प में एक अंतर्निहित ओओ प्रणाली है, हालांकि यह आपके द्वारा उपयोग किए जाने वाले अन्य ओओ सिस्टम से काफी अलग है। विशेष रूप से, यह लागू नहीं है - आपको OO कोड लिखना नहीं है ।

  6. भाषाओं में कुछ अलग डिज़ाइन दर्शन हैं। अभिनेता मॉडल को समझने के लिए न्यूनतम बोली के रूप में योजना तैयार की गई थी; यह बाद में शिक्षाशास्त्र के लिए उपयोग हो गया। कॉमन लिस्प को असंख्य लिस्प बोलियों को एकजुट करने के लिए डिज़ाइन किया गया था जो उछली थीं। क्लोजर को सुगमता के लिए डिज़ाइन किया गया था। नतीजतन, स्कीम में शक्तिशाली और प्रतिमान-अज्ञेय (कार्यात्मक, ऊ, जो भी हो), और कार्यात्मक प्रोग्रामिंग के पक्ष में क्लोजर होने की न्यूनतम और सुरुचिपूर्ण होने की एक प्रतिष्ठा है।


4
रैकेट स्कीम का कार्यान्वयन नहीं है , संगतता मोड को छोड़कर। देखें stackoverflow.com/questions/3345397
— बग

क्लोजर में हाइजेनिक मैक्रो नहीं है, क्योंकि मैंने कठिन रास्ता खोज लिया है।
— pyon

40

लिस्प -1 और लिस्प -2 मतभेदों के बारे में मत भूलना।

स्कीम और क्लोजर लिस्प -1 हैं:
इसका मतलब है कि चर और कार्य नाम दोनों एक ही नामस्थान में रहते हैं।

आम लिस्प में लिस्प -2 है:
फ़ंक्शन और चर में अलग-अलग नामस्थान हैं (वास्तव में, सीएल में कई नामस्थान हैं)।


-4

जिम्प स्कीम में लिखा है :)

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

योजना को लिस्प भाषा को सरल बनाने के लिए डिज़ाइन किया गया था, यह इसका एकमात्र इरादा था, सिवाय इसके कि यह वास्तव में कभी पकड़ा नहीं गया था। मुझे लगता है कि क्लीजुर कुछ ऐसा ही करता है इसका मतलब जेवीएम के लिए स्कीम को आसान बनाना है। इसका हर दूसरी जेवीएम भाषा की तरह, केवल उपयोगकर्ता अनुभव को बढ़ाने के लिए, केवल जावा भूमि में राइटिंग बॉयलरप्लेट को सरल बनाने के लिए।


2
"JVM के लिए स्कीम को सरल बनाने का मतलब और कुछ नहीं" "हर दूसरी JVM भाषा की तरह" हाँ, सही है।
— ऑस्करव

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