Clojure के बारे में क्या बहुत अच्छा है? [बन्द है]


40

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

को देखने के बाद ClojureScript और Compojure (दो ऊपर उल्लिखित "अच्छा" परियोजनाओं), मैं सिर्फ महसूस Clojure की तरह एक मजाक है। मुझे समझ नहीं आ रहा है कि कोई व्यक्ति क्लीजुर को यह कहे कि रूबी या पायथन, दो भाषाएं जिन्हें मैं पसंद करता हूं और उनके पास एक साफ वाक्यविन्यास है और उन्हें चुनना बहुत आसान है जबकि क्लोजर हर जगह इतने कोष्ठक और प्रतीकों का उपयोग करता है कि यह पठनीयता को बर्बाद कर देता है मुझे।

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

तो कृपया, मुझे बताए!

  • Clojure के बारे में क्या अच्छा है?
  • पूर्ण न्यूनतम क्या है जो मुझे इसकी सराहना करने के लिए भाषा के बारे में जानना चाहिए?

14
I don't understand why someone would pick Clojure over say, Ruby or Python- यह jvm पर चलता है और पूरे जावा लाइब्रेरी का उपयोग कर सकता है। ... have such a clean syntaxयकीनन, कार्यात्मक भाषाओं की तरह लिस्प में एक बहुत ही साफ वाक्यविन्यास और संरचना है, इसका सिर्फ एक सबसे अधिक लोगों को उपयोग नहीं किया जाता है।

22
इसका नाम सेक्सी है।
प्रोग्रामर

4
एक तहखाने में रहने वाला कोई भी किशोर कुछ महीनों के भीतर अजगर और रूबी को उठा सकता है। यदि वे सब कभी उपयोग करना चाहते हैं, तो वे तहखाने से बाहर कभी नहीं निकलेंगे। मैं यह नहीं कह रहा हूं कि जिसने कई वर्षों तक पेशेवर पायथन विकास किया है, वह किसी ऐसे व्यक्ति की तुलना में कम नश्वर है जो एम्बेडेड सी लिखता है, लेकिन अगर पायथन और रूबी वे सभी जानते हैं और वे कभी भी जानना चाहते हैं, तो कुछ गड़बड़ है। वैसे, कार्यात्मक प्रोग्रामिंग और लिस्प्स की खोज और सराहना करने के लिए स्नातक होने के बाद मुझे व्यक्तिगत रूप से 6 साल से अधिक समय हो गया। स्कीम के लिए मेरी पहली प्रतिक्रिया घुटने टेकने की थी।
जॉब

4
"यकीनन, कार्यात्मक भाषाओं की तरह लिस्प में बहुत साफ वाक्यविन्यास और संरचना होती है, इसका सिर्फ एक सबसे अधिक लोग उपयोग नहीं करते हैं।": मुझे लिस्प के साथ बहुत कम अनुभव है और मैंने अभी "प्रैक्टिकल कॉमन लिस्प" पुस्तक पढ़ना शुरू किया है। अब तक, मुझे सिंटैक्स के साथ कोई समस्या नहीं हुई है; IMHO के बारे में मिथक लिस्प की तरह कम पठनीय किया जा रहा है सिर्फ FUD हैं।
जियोर्जियो

4
मैंने हाल ही में क्लोजर को देखना शुरू किया (लेकिन हास्केल और स्काला के साथ मुझे पहले से अनुभव है, इसलिए वाक्य रचना ऐसा झटका नहीं है)। मुझे वास्तव में यह आश्चर्यजनक रूप से पठनीय लगा। fewकई भाषाओं की तुलना में कोष्ठक के बाहर बहुत प्रतीक हैं, और लगभग कोई आरक्षित शब्द नहीं है। आप इसे अपठनीय मानते हैं, क्योंकि यह एक पूरी तरह से नया प्रतिमान है और एक विशिष्ट ऑब्जेक्ट ओरिएंटेड भाषा की तुलना में मौलिक रूप से अलग तरीके से काम करता है। इसके माध्यम से कुछ समय और शक्ति दें।
KChaloux

जवाबों:


47

आपके द्वारा दी गई पृष्ठभूमि के लिए, यदि मैं विरोधाभास कर सकता हूं:

  1. आप रूबी / पायथन से परिचित हैं।
  2. आप अभी तक Clojure के फायदे नहीं देखते हैं।
  3. आपको लिस्प या क्लोजर सिंटैक्स या तो स्पष्ट नहीं मिलता है।

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

अपने दो प्रश्नों को सीधे संबोधित करने के लिए:

  1. Clojure के बारे में क्या अच्छा है? इस साइट और अन्य जगहों पर बहुत सारे उत्तर, उदाहरण के लिए देखें https://www.quora.com/Why-would-someone-learn-Clojure
  2. पूर्ण न्यूनतम क्या है जो मुझे इसकी सराहना करने के लिए भाषा के बारे में जानना चाहिए? मैं क्लजुरे के डिजाइन के पीछे के बड़े विचारों को जानने का सुझाव देता हूं, जैसा कि क्लीजुर प्रोग्रामिंग और द जॉय ऑफ क्लोजर पुस्तकों के अनुसार, और रिच हिक्की की वार्ता, esp में व्यक्त किया गया है । बात सिंपल मेड ईज़ी । एक बार जब आप जानते हैं कि क्या / क्यों आप तो समझ शुरू कर सकते हैं कि कैसे जब Clojure कोड को पढ़ने, esp। कक्षाओं, वस्तुओं, स्थिति / उत्परिवर्तन से "बस फ़ंक्शंस और डेटा" (उच्च-क्रम वाले फ़ंक्शंस, नक्शे / सेट / क्रम, प्रकार) में अपनी सोच कैसे बदलें।

अतिरिक्त सुझाव: लिस्प की लालित्य और शक्ति आंशिक रूप से अपने न्यूनतावादी और पूरी तरह से सुसंगत वाक्य रचना से है। यह सराहना करना बहुत आसान है कि एक अच्छे संपादक के साथ, उदाहरण के लिए Emacs with clojure-mode और ParEdit। जैसा कि आप इसके साथ अधिक परिचित हैं, वाक्यविन्यास दूर हो जाता है और आप "शब्दार्थ, इरादे, और संक्षिप्त सार देखेंगे"। दूसरे, क्लोजुरस्क्रिप्ट या कॉम्पोज्योर के स्रोत को पढ़ने से शुरू न करें, वे बहुत-से-एक बार हैं; कुछ 4clojure.org समस्याओं की कोशिश करें, और वहां के शीर्ष कोडर के साथ समाधानों की तुलना करें। यदि आप 4-6 अन्य समाधानों को देखते हैं, तो निश्चित रूप से किसी ने वास्तव में मुहावरेदार, रसीला एफपी-शैली समाधान लिखा होगा जिसे आप एक अनाड़ी, क्रियात्मक और अनावश्यक रूप से जटिल अनिवार्य शैली समाधान के साथ तुलना कर सकते हैं।


20

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

नकारात्मक पक्ष यह है कि चूंकि प्रत्येक लिस्प कार्यक्रम अनिवार्य रूप से अपनी भाषा को परिभाषित करता है, आपको वास्तव में चीजों पर एक ठोस समझ की आवश्यकता है जो यह समझ रही है कि क्या चल रहा है।

अब, आपके सवालों का जवाब देने के लिए ...

  1. क्लजुरे एक आधुनिक लिस्प बोली है जो जेवीएम / सीएलआर में चलती है। इससे मौजूदा बुनियादी ढांचे में लिस्प की शक्ति का लाभ उठाना आसान हो जाता है।

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

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

सरल वाक्यविन्यास कंप्यूटर के लिए व्याख्या करना आसान बनाता है (ऐसे आसान शक्तिशाली मैक्रोज़ की अनुमति देता है), लेकिन यह मानव के लिए जटिल अभिव्यक्तियों को जल्दी से पार्स करना बहुत कठिन बनाता है।



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

3
@RobertHarvey मैं तर्क दूंगा कि यदि आप मार्कोस का लाभ नहीं उठा रहे हैं, तो अन्य भाषाओं के ढेर सारे विकल्प हैं, जिन्हें मैं अधिक पठनीय वाक्य रचना के साथ प्रथम श्रेणी के कार्यों की पेशकश करूंगा।
बंगशंकलिंक

@MichaelT जो साफ-सुथरा दिखता है। मुझे अवधारणा पसंद है।
DPM

3
@RobertHarvey Scala, JavaScript, C #, Python, और Haskell सभी मेरे सिर के शीर्ष पर हैं जहाँ तक प्रथम श्रेणी के कार्यों वाली भाषाएँ हैं जिन्हें मैं लिस्प्स की तुलना में अधिक मानव-पार्स सिंटैक्स पर विचार करता हूँ।
बंगलेस्टिंक

10

क्लोजर की ताकत को कई बार उजागर किया गया है, और, निश्चित रूप से पर्याप्त, एक बहुत शक्तिशाली भाषा के लिए बनाते हैं, इसलिए मैं उन्हें यहां फिर से नहीं दोहराऊंगा।

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

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

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

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