मीथप्रोग्रामिंग के लिए अजगर बनाम रूबी [बंद]


90

मैं वर्तमान में मुख्य रूप से एक डी प्रोग्रामर हूं और अपने टूलबॉक्स में एक और भाषा जोड़ने के लिए देख रहा हूं, अधिमानतः एक है जो मेटाप्रोग्रामिंग हैक का समर्थन करता है जो सिर्फ डी की तरह एक संकलित भाषा में नहीं किया जा सकता है।

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

जरूरी:

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

कुछ हद तक महत्वपूर्ण:

  1. प्रदर्शन। यह अच्छा होगा यदि प्रदर्शन सभ्य था, लेकिन जब प्रदर्शन एक वास्तविक प्राथमिकता है, तो मैं इसके बजाय डी का उपयोग करूंगा।
  2. अच्छी तरह से प्रलेखित।

महत्वपूर्ण नहीं:

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

1
+1 आम तौर पर अच्छी तरह से पूछे जाने वाले प्रश्न के लिए।
त्रिपिटक

अफसोस की बात है कि उच्च श्रेणी के उत्तर सभी मूल रूप से "यह निर्भर करता है" कहते हैं और निचले उत्तर मूल रूप से पाइथन बनाम रूबी फ्लेम युद्ध हैं।
दान बर्टन

क्या आपने क्लोजर पर विचार किया है?
मार्क थॉमस

जवाब है जूलिया ! यह अभी वापस मौजूद नहीं था: bit.ly/julia_meta ... आनन्द! जूलिया @dsimcha द्वारा सूचीबद्ध सभी महत्वपूर्ण बिंदुओं को शामिल करती है, प्लस प्रदर्शन और अन्य सभी बिंदु सच हो रहे हैं क्योंकि जूलिया परिपक्व होता रहता है।
साल्चीपापा

जवाबों:


15

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


30
वहाँ निश्चित रूप से एक ही बात नहीं कर रहे हैं । सतह पर समान दिखते हैं, लेकिन एक आप रूबी की सबसे शक्तिशाली विशेषताओं का उपयोग करते हैं, आप समझते हैं कि पायथन का सिर्फ कोई मुकाबला नहीं है। एक उदाहरण के लिए रूबी बनाम एक पायथन में एक डीएसएल लिखने की कोशिश करें, या रन-टाइम पर फ़ंक्शन, विधियों, कक्षाओं आदि का निर्माण करें। यह रूबी में बहुत अधिक सीधा है।
फेलिप सी सी

14
यह दुर्लभ नहीं है कि आपको मेटाप्रोग्रामिंग करने की आवश्यकता है, यह केवल दुर्लभ है कि यह किया गया है। सभी लेकिन सबसे तुच्छ कार्यक्रम में दोहराए जाने वाले पैटर्न होते हैं जो सामान्य रीफैक्टरिंग टूल पर नहीं आते हैं, लेकिन मेटाप्रोग्रामिंग द्वारा आसानी से मारे जा सकते हैं।
वेन कॉनराड

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

5
आपको शायद दोनों में एक क्रैश कोर्स करना चाहिए, लेकिन आसान मेटाप्रोग्रामिंग के लिए यह प्रतीत होता है कि रूबी अधिक अनुकूल है। मेरे पास हालांकि बहुत अधिक अनुभव नहीं है, इसलिए इसे नमक के दाने के साथ लें।
सीन कोपेनहेवर

7
रूबी और पायथन केवल इस तथ्य के समान हैं कि वे "सुंदर कोड" का प्रचार करते हैं। वे सिर्फ उस सौंदर्य चीज पर पूरी तरह से अलग विचार रखते हैं (जो आईएमओ अच्छा है)
गाबी पुरकारू

69

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

क्या हम सब नहीं करेंगे।

कोड और डेटा के बीच न्यूनतम अंतर, लिस्प शैली

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

यदि आप आसानी से पढ़ा जाने वाला वाक्यविन्यास चाहते हैं, तो आपके पास पायथन है। हालाँकि, कोड आमतौर पर निर्मित डेटा संरचनाओं में से किसी में प्रतिनिधित्व नहीं किया जाता है। यह विफल हो जाता है - जैसा कि अधिकांश भाषाएं आपकी 'महत्वपूर्ण' सूची के आइटम # 1 में करती हैं। इससे उपयोगी सहायता प्रदान करना मुश्किल हो जाता है।

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


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

11
लोग लिस्प को पढ़ने में कठिन पाते हैं क्योंकि वे वाक्य रचना से परिचित नहीं हैं। मुझे लिस्प को C # पढ़ने में बहुत आसान लगता है (लेकिन पायथन की तुलना में कठिन)।
जूल्स

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

लंबे लंबे एगी में डायलन नाम की एक भाषा थी जो वास्तव में यही होनी चाहिए।
फ्रेडरिक

17

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

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


ऐसा लगता है कि ब्लॉग प्रविष्टि व्यक्तिगत प्राथमिकताओं के साथ और अधिक करने के लिए लगता है (निष्पक्ष लेकिन सुंदरता देखने वाले की आंखों में है), बजाय मेटाप्रोग्रामिंग के - जो ओपी का मुख्य बिंदु था।
Inger

16

डिस्क्लेमर: मैं केवल या तो भाषा में डब्बल हूं, लेकिन मेरे पास कम से कम छोटे काम करने वाले प्रोग्राम हैं (न केवल त्वरित स्क्रिप्ट, जिसके लिए मैं पर्ल, बैश या जीएनयू मेक का उपयोग करता हूं) दोनों में।

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

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

दोनों 1 और 4 में अच्छा स्कोर करते हैं। [संपादित करें: वास्तव में 1 बहुत ही तर्कपूर्ण है - दोनों में "स्पष्ट" है, जैसा कि व्याख्या की गई भाषाओं में सामान्य है, लेकिन वे शायद ही वैचारिक रूप से शुद्ध हैं। आप क्लोज़र को परिभाषित कर सकते हैं, ऑब्जेक्ट्स को विधि असाइन कर सकते हैं, और क्या नहीं। सुनिश्चित नहीं हैं कि यह जहाँ तक आप चाहते हैं।]

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

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


15

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

इसकी वर्तमान प्रासंगिकता के अन्य संकेतक: यह किसी भी मंच पर चलता है जिसे आप नाम देना चाहते हैं ( आईफोन सहित ); गिल्ड ब्राचा स्क्वीक पर अपने अख़बार के काम को आधार बना रहे हैं; वी 8 टीम ने स्मॉलटाकल वीएम पर अपने दाँत काटे ; और डेन इंगल्स और रैंडल श्वार्ट्ज ने हाल ही में जंगल में वर्षों के बाद स्मालटाक काम पर लौट आए हैं।

आपकी खोज के साथ शुभकामनाएं - हमें बताएं कि आप अंत में क्या तय करते हैं।


14

लिस्प प्रदर्शन सहित अपने सभी मानदंडों को पूरा करता है, और यह एकमात्र ऐसी भाषा है जिसमें (अजीब) वाक्यविन्यास नहीं है। यदि आप इसे ऐसे अस्वाभाविक रूप से सूचित-गलत / गलत-आधारित आधार पर छोड़ देते हैं और परिणामस्वरूप उदाहरण जैसे Emacs + SLIME + CL का उपयोग करने से चूक जाते हैं, तो आप अपने आप को एक महान कार्य करेंगे।


4
या आप क्लोजर की कोशिश कर सकते हैं, जो मुझे बहुत अच्छा लगता है।
पुतीनो

1
मजबूत सहमत हैं। यदि आप लिस्प की शक्ति चाहते हैं, तो बस में गोता लगाएँ और इसे पाएं! यह वास्तव में काफी आसान है कि पारेंसों के लिए इस्तेमाल किया जा सके; वे उतने बड़े नहीं हैं जितने लोग उन्हें बनाते हैं।
दान बर्टन

11

आपके 4 "महत्वपूर्ण" पॉइंट्स रूबी की ओर ले जाते हैं, जबकि 2 "कुछ महत्वपूर्ण" पॉइंट्स पायथन द्वारा शासित हैं। ऐसा ही होगा।


11

आप रूबी का वर्णन कर रहे हैं।

  • अच्छा मेटाप्रोग्रामिंग। रनटाइम पर कक्षाएं, विधियाँ, कार्य, आदि बनाने की क्षमता। अधिमानतः, कोड और डेटा के बीच न्यूनतम अंतर, लिस्प शैली।

रनटाइम पर मौजूदा प्राइमिटिव्स को विस्तारित करना और संशोधित करना बहुत आसान है। माणिक्य में सब कुछ एक वस्तु है, तार, पूर्णांक, यहां तक ​​कि कार्य भी।

आप वाक्य रचना चीनी के लिए शॉर्टकट भी बना सकते हैं, उदाहरण के लिए class_eval के साथ ।

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

रूबी कम आश्चर्य के सिद्धांत का पालन ​​करती है , और रूबी कोड बनाम अन्य भाषा में समकक्ष की तुलना करते समय कई लोग इसे अधिक "सुंदर" मानते हैं।

  • एकाधिक प्रतिमान। कोई भी प्रतिमान हर परियोजना के लिए सही नहीं है, या यहां तक ​​कि एक परियोजना के भीतर हर छोटे उपप्रकार।

आप अनिवार्य, वस्तु उन्मुख, कार्यात्मक और चिंतनशील का पालन कर सकते हैं।

  • एक दिलचस्प भाषा जो वास्तव में प्रोग्रामिंग के बारे में सोचने के तरीके को प्रभावित करती है।

यह बहुत व्यक्तिपरक है, लेकिन मेरे दृष्टिकोण से एक ही समय में कई प्रतिमानों का उपयोग करने की क्षमता बहुत दिलचस्प विचारों के लिए अनुमति देती है।

मैंने पायथन की कोशिश की है और यह आपके महत्वपूर्ण बिंदुओं पर फिट नहीं बैठता है।


11
-1 मैं पाइथन का उपयोग कर रहा हूं और यह पूरी तरह से फिट बैठता है, पाइथन और रूबी के बीच अन्य पहलुओं में अंतर है। फैनबॉय-ईश नोसेमेकर, आप हैं।
गोर्स्की

6
बहुत बात की लेकिन कोई चल नहीं पाया। कहने के लिए, स्ट्रिंग कक्षा को गतिशील रूप से एक विधि जोड़ने के पायथन में एक उदाहरण प्रदान करने की देखभाल?
फेलिपक

6
@ जोहने से मेरी बात ठीक है; यह बहुत जटिल और बदसूरत है ( स्ट्रिंग वर्ग के लिए असंभव का उल्लेख नहीं करना )। रूबी में OTOH यह बहुत सरल है: "self.class.send (: define_method,: method_name) {method_code}"
FelipeC

2
रूबी पीओएलएस का पालन करने की कोशिश कर सकती है , लेकिन मैं यह नहीं कहूंगा कि यह करता है । उदाहरण के लिए, एसओ पर मेस lambda/ Proc.newमेस को "आश्चर्यजनक व्यवहार" और "अत्यधिक प्रतिवाद" कहा गया है। :-) रूबी के रूप में किसी भी भाषा के बड़े और जटिल होने के कारण इस तरह के भ्रमित क्षेत्र हैं।
केन

2
@ यहाँ पर रुमाल में बंदर-पेटिंग का एक उदाहरण है, जो मेट्रोपोग्रामिंगString उद्देश्यों के लिए है: coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/pols/… । उपवर्ग काम नहीं करेगा; हालाँकि, एक सरल दो-तर्क कार्य होगा।
पी

8

समान उदाहरणों की तुलना करें myListजो अलग-अलग भाषाओं में एक ही काम करते हैं (एक सूची से आइटमों के एक नए गैर-खाली विवरण के साथ जुड़ें ) (भाषाओं को रिवर्स-अल्फाबेटिक ऑर्डर में व्यवस्थित किया जाता है):

रूबी :

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

या

myList.map(&:description).reject(&:empty?).join("\n")

अजगर :

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

या

"\n".join(f.description() for f in mylist if f.description())

पर्ल :

join "\n", grep { $_ } map { $_->description } @myList;

या

join "\n", grep /./, map { $_->description } @myList;

जावास्क्रिप्ट :

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

Io :

myList collect(description) select(!="") join("\n")

यहाँ एक Io गाइड है


3
(प्रारूप nil "~ {~ ~ ~ ~ ~% ~}" (निकालें nil (mapcar # 'विवरण mylist)))
रेनर जोसविग

अच्छा है, लेकिन यहाँ मेटाप्रोग्रामिंग कहाँ है? यह कुछ थोड़ा कार्यात्मक शैली लगता है, दूर से प्रश्न से संबंधित है।
Inger

6

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

लिस्प निश्चित रूप से काफी शांत और देखने लायक है; जैसा कि आपने कहा, समुदाय का आकार आदि बहुत तेज़ी से बदल सकता है। यह कहा जा रहा है, आकार ही समुदाय की गुणवत्ता के रूप में महत्वपूर्ण नहीं है। उदाहरण के लिए, #ruby-langचैनल अभी भी कुछ अविश्वसनीय रूप से स्मार्ट लोगों से भरा है। लिस्प कुछ वास्तव में स्मार्ट लोगों को भी आकर्षित करने के लिए लगता है। मैं पायथन समुदाय के बारे में बहुत कुछ नहीं बोल सकता क्योंकि मेरे पास पहले से बहुत अधिक अनुभव नहीं है, लेकिन यह कभी-कभी "बहुत बड़ा" लगता है। (मुझे याद है कि लोग अपने आईआरसी चैनल पर काफी असभ्य हैं, और मैंने उन दोस्तों से सुना है जो वास्तव में पायथन में हैं, जो अपवाद के बजाय नियम लगता है।)

वैसे भी, कुछ संसाधन जो आपको उपयोगी लग सकते हैं वे हैं:

1) प्रोगैमैटिक प्रोग्रामर्स रूबी मेटाप्रोग्रामिंग सीरीज़ ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming- नि: शुल्क नहीं, लेकिन बाद के एपिसोड काफी पेचीदा हैं। (कोड मुफ़्त है, यदि आप इसे डाउनलोड करना चाहते हैं और देखें कि आप क्या सीख रहे हैं।)

2) पॉल ग्राहम ( http://www.paulgraham.com/onlisp.html ) द्वारा लिस्प पर । यह थोड़ा पुराना है, लेकिन यह एक क्लासिक है (और मुफ्त में डाउनलोड करने योग्य है)।


5

मैं कई परियोजनाओं के लिए पायथन का उपयोग कर रहा हूं और मुझे लगता है कि पायथन आपके द्वारा मांगी गई सभी सुविधाएं प्रदान करता है।

जरूरी:

  1. मेटाप्रोग्रामिंग: पायथन मेटाक्लस और रनटाइम क्लास / मेथड जनरेशन आदि का समर्थन करता है
  2. सिंटेक्स: वैसे भी व्यक्तिपरक है। मुझे इसकी सादगी के लिए पायथन सिंटैक्स पसंद है, लेकिन कुछ लोगों की शिकायत है कि पायथन व्हाट्सएप-संवेदी है।
  3. प्रतिमान: पायथन प्रक्रियात्मक, वस्तु-उन्मुख और बुनियादी कार्यात्मक प्रोग्रामिंग का समर्थन करता है।
  4. मुझे लगता है कि पायथन में एक बहुत ही व्यावहारिक उन्मुख शैली है, यह मेरे लिए बहुत प्रेरणादायक था।

कुछ हद तक महत्वपूर्ण:

  1. प्रदर्शन: अच्छी तरह से इसकी एक पटकथा भाषा। लेकिन पायथन के लिए सी एक्सटेंशन लिखना एक सामान्य अनुकूलन अभ्यास है।
  2. प्रलेखन: मैं शिकायत नहीं कर सकता। यह जावा से किसी को पता हो सकता है के रूप में विस्तृत है, लेकिन यह काफी अच्छा है।

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

सादर, डेनिस


3
अजगर व्हॉट्सएप-संवेदी नहीं है यह इंडेंटेशन-सेंसिटिव है।
jfs

5

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

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

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

Self.name का उपयोग करके निन्जा वर्ग के नाम को वापस करने के लिए निनजा वर्गों के मेटाक्लास नाम पद्धति का उपयोग करता है । पाइथन में मेटाप्रोग्रामिंग फूल इतना सुंदर है? मुझे पूरी तरह से संदेह है!


4

ठीक है, अगर आपको लिस्प सिंटैक्स पसंद नहीं है तो शायद असेंबलर जाने का रास्ता है। :-)

यह निश्चित रूप से कोड और डेटा के बीच न्यूनतम अंतर है, बहु-प्रतिमान है (या हो सकता है कि कोई प्रतिमान नहीं है) और यह एक दिमाग का विस्तार है (यदि थकाऊ) सीखने और गुर के रूप में दोनों का अनुभव कर सकते हैं।


मुझे लगता है कि मैंने विधानसभा भाषा में किसी अन्य भाषा की तुलना में अधिक मेटा प्रोग्रामिंग किया है। कोड डेटा है और डेटा कोड बनने की कोशिश कर सकता है। और डेटा हस्ताक्षरित या अहस्ताक्षरित नहीं है, यह निर्णय लेने वाला ओपकोड है।
नोसरेडना

1
मेरे पास कोडांतरक कोड है जिसे आप OO होने का दावा कर सकते हैं। इसमें ऐसी चीजें हैं जो विधियों की तरह दिखती हैं - आप उस को कहते हैं जो "वर्ग" पर निर्भर करता है।
बसंत

4

Io आपके सभी "महत्वपूर्ण" बिंदुओं को संतुष्ट करता है। मुझे नहीं लगता कि पागल मेटा हैकरी करने के लिए बेहतर भाषा है।


इसके लिए धन्यवाद, यह नहीं पता था। पहली नज़र में मज़ेदार लगता है, शायद (()) के बहुत सारे लेकिन वैसे भी। आशा है कि मुझे जल्द ही एक बार देखने का समय मिलेगा।
21

3

एक जो मेटाप्रोग्रामिंग हैक्स का समर्थन करता है जो सिर्फ एक संकलित भाषा में नहीं किया जा सकता है

मैं एक ऐसी भाषा ढूंढना पसंद करूंगा, जो लिस्प करती है जिसमें से कुछ को ठंडा करने की अनुमति देता है

लिस्प संकलित किया जा सकता है।



3

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


2

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

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


2

आप तुतलाना शैली कोड-है-डेटा अवधारणा की तरह है, लेकिन Lispy वाक्य रचना पसंद नहीं है, हो सकता है Prolog एक अच्छा विकल्प होगा।

चाहे वह "आधुनिक भाषा का उपयोग करने के लिए मज़ेदार" हो, मैं दूसरों को न्याय करने के लिए छोड़ दूँगा। ;-)


2

पाइथन, स्मॉलटाक और रूबी की खोज के बाद रूबी मेरी पसंद है।


2

OCaml के बारे में क्या?

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

मुझे लगता है कि यह निम्नलिखित को संतुष्ट करता है:

जरूरी:

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

कुछ हद तक महत्वपूर्ण:

  1. प्रदर्शन। यह अच्छा होगा यदि प्रदर्शन सभ्य था, लेकिन जब प्रदर्शन एक वास्तविक प्राथमिकता है, तो मैं इसके बजाय डी का उपयोग करूंगा।
  2. अच्छी तरह से प्रलेखित।

OCaml आपको रनटाइम पर कक्षाएं / तरीके बनाने की अनुमति देता है? वह कैसे काम करता है?
जेसन क्रेइटन

मैं सिर्फ OCaml के बारे में पढ़ता हूँ और शायद यह रनटाइम में सामान नहीं बना सकता है इसलिए मैंने इसे हटा दिया है।
रॉबर्ट वुकोविच

2

मैंने पायथन का उपयोग बहुत कम किया है, लेकिन बहुत अधिक रूबी। हालाँकि मैं तर्क दूंगा कि वे दोनों आपके लिए क्या प्रदान करते हैं।

यदि मैं आपके सभी चार बिंदुओं को देखता हूं तो आप कम से कम जांच कर सकते हैं: http://www.iolanguage.com/

और Mozart / Oz आपके लिए भी दिलचस्प हो सकता है: http://mozart.github.io/

सादर फ्रेडरिक



1

मुझे यकीन नहीं है कि अजगर आपकी इच्छा की सभी चीजों को पूरा करेगा (विशेषकर कोड और डेटा के बीच न्यूनतम अंतर के बारे में), लेकिन अजगर के पक्ष में एक तर्क है। वहाँ एक परियोजना है जो आपके लिए डी में अजगर के लिए एक्सटेंशन प्रोग्राम करना आसान बनाता है, इसलिए आपके पास दोनों दुनिया के सर्वश्रेष्ठ हो सकते हैं। http://pyd.dsource.org/celerid.html



1

मैं आपको रूबी के साथ जाने की सलाह दूंगा।

जब मैंने पहली बार इसे सीखना शुरू किया, तो मुझे यह वास्तव में आसान लगा।


1

रूबी कार्यान्वयन के साथ रूबी प्रोग्रामिंग भाषा को मिश्रण न करें, यह सोचकर कि रूबी में पॉसिक्स थ्रेड संभव नहीं हैं।

आप बस pthread समर्थन के साथ संकलित कर सकते हैं, और यह उस समय पहले से ही संभव था जब यह धागा बनाया गया था , यदि आप सजा को माफ करते हैं।

इस प्रश्न का उत्तर सरल है। यदि आप लिस्प पसंद करते हैं, तो आप शायद माणिक पसंद करेंगे। या, आपको जो अच्छा लगे।




0

अपने मुख्य-बिंदु (मेटा-प्रोग्रामिंग) के बारे में: ग्रूवी के संस्करण 1.6 में एएसटी (एब्सट्रैक्ट सिंटेक्स ट्री) प्रोग्रामिंग है, जो एक मानक और एकीकृत सुविधा के रूप में अंतर्निहित है। Ruby में RubyParser है, लेकिन यह एक ऐड-ऑन है।

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