5

मॉडल-संचालित एसड-डेवलपमेंट (एमडीएसडी) के बारे में सिर्फ (जर्मन) विकी-आलेख पढ़ना।मॉडल संचालित सॉफ्टवेयर विकास बनाम हास्केल

  • MDSD सूखी-सिद्धांत के बारे में है (न अपने आप को दोहराने)
  • MDSD DSLs के डिजाइन के बारे में है (डोमेन विशिष्ट बोली) और जेनरेटर
  • समस्याओं का अधिक संक्षिप्त विवरण: विकी-परिभाषा संक्षेप (संबंधित डीएसएल के अमूर्तता के उच्च स्तर के माध्यम से) एमडीएसडी के माध्यम से संभव है।

के बाद से मैं जानता हूँ कि और उच्च क्रम कार्यात्मक प्रोग्रामिंग मुझे आश्चर्य है, का उपयोग करें और अपने वास्तविक सवाल यह है: लेकिन एक हताश सुई (का एक हिस्सा) शक्तिशाली सुविधाओं उच्च क्रम कार्यात्मक प्रोग्रामिंग में प्रदान करता है प्रयास MDSD कुछ भी नहीं है प्रोग्रामिंग भाषाएं/प्रतिमान जो स्वाभाविक रूप से उन सुविधाओं की कमी करते हैं?

(या मैं गलत और यहां तक ​​कि काफी हद तक उच्च क्रम कार्यात्मक प्रोग्रामिंग? समर्थन करने के लिए इस्तेमाल किया जा सकता है MDSD किया)

+1

हाँ ;-) (आपके पहले प्रश्न के लिए) – jmg

+0

मैंने कुछ ऐसा ही पूछा: http://stackoverflow.com/questions/2807629/handling-incremental-data-modeling-changes-in- कार्यात्मक- प्रोग्रामिंग और यह एक जो बंद (अभी भी इसके बारे में pissed) http://stackoverflow.com/questions/3134825/how-can-you-be-dry-with-a-programming-language-that-doesnt-have-reflection –

उत्तर

5

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

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

3

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

एफपी एक ही समस्या (और फायदे) का सामना कर सकता है जो प्रक्रियात्मक भाषाएं करते हैं: व्यवहार और डेटा का पृथक्करण। ओओपी भाषाएं इसे हतोत्साहित करती हैं। यह अलगाव Anemic Domain Model के रूप में जाना जाता है।

यह "जुदाई" बहुत मुश्किल (और एक डीएसएल के साथ हो सकता है और भी बदतर) अपने डेटा को बदलने बना सकते हैं अपनी पोस्ट देखें: दूसरा पहलू बदलते व्यवहार पर हालांकि Handling incremental Data Modeling Changes in Functional Programming

और चीजों को बोर्ड भर में राज्यविहीन है में दर्द कर रहे हैं ओओपी डोमेन संचालित डिजाइन के साथ बट। हालांकि एओपी आईटीडी के, और मेटा-प्रोग्रामिंग जैसी चीजों के साथ यह एक समस्या से कम हो जाता है।

स्कैला और रूबी दोनों तकनीकों के मिश्रण का अच्छा उदाहरण हैं।

+0

डीएसएल का उपयोग करते समय, डेटा में परिवर्तन करने का एक तरीका आसान है कि डेटा के ज्ञान को आदिम परिचालन के एक छोटे से सेट तक सीमित रखें, और इन प्राइमेटिव के संदर्भ में बाकी परिचालनों को लागू करें। इसके बाद आप एक अपारदर्शी प्रकार के पीछे वास्तविक डेटा छिपाकर इसे लागू कर सकते हैं (हास्केल के मामले में डेटा कन्स्ट्रक्टर को निर्यात न करके)। – hammar

+0

@hammer, जबकि मैं आपसे सहमत हूं कि मेरे पास एक डीएसएल बनाने के साथ असली समस्या है डीएसएल (कम से कम हास्केल में) बनाने के लिए मैं खुद को ** ** डोमेन पर ध्यान केंद्रित नहीं कर रहा हूं बल्कि जटिल पैडेंटिक हास्केल मोनाड्स, कॉम्बिनेटर्स, तीर और क्या नहीं। (फिर से सिर्फ मेरी राय)। –

+1

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

संबंधित मुद्दे