डोमेन विशिष्ट भाषा क्या है? कोई इसका उपयोग कर रहा है? और किस तरह से?


107

मुझे लगता है कि मैं किसी तरह के इंट्रो की तलाश कर रहा हूं और देखता हूं कि क्या किसी ने इसका इस्तेमाल किया है। क्या इसका उपयोग करने के कोई विशेष लाभ हैं?

विकिपीडिया:

डोमेन-विशिष्ट भाषा (डीएसएल) एक प्रोग्रामिंग भाषा या विनिर्देश भाषा है जो एक विशेष समस्या डोमेन, एक विशेष समस्या प्रतिनिधित्व तकनीक और / या एक विशेष समाधान तकनीक के लिए समर्पित है।

क्या आप इसे लागू करने का कोई विशिष्ट उदाहरण दे सकते हैं या किसी दिए गए परिदृश्य में यह कैसे उपयोगी हो सकता है?


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

जैसा कि नीचे उल्लेख किया गया है, डीएसएल एक भाषा नहीं है, बल्कि विशेष उद्देश्य भाषाओं के एक पूरे वर्ग का नाम है।
dmckee --- पूर्व-संचालक ने

तो क्या मैं कह सकता हूं कि आर एक डीएसएल है?
श्रीकर डोडी

2
इसके किनारे पर, लेकिन मैं नहीं होगा। आर में सभी सामान्य उद्देश्य संरचनाएं हैं और इसका उपयोग कई प्रकार की संगणनाओं के लिए किया जाता है; संख्यात्मक अभिकलन और आँकड़े एक बहुत अधिक डोमेन नहीं है। हालांकि यह परिभाषा का एक अच्छा परीक्षण है।
चार्ली मार्टिन

जवाबों:


114

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

मार्टिन फाउलर विचार का एक बड़ा प्रस्तावक है, जैसा कि यहाँ है


3
रूबी के पास क्या विशेषताएं हैं जो एक नए डीएसएल को आसान बनाती हैं?
लर्नकुरेव

2
@ लर्नकुरेव - रूबी में मेटाप्रोग्रामिंग था, जो मदद करता है। rubylearning.com/blog/2010/11/23/…
जेम्स ब्लैक

@CharlieMartin क्या आप मुझे "ग्रूवी" के बारे में बता सकते हैं? यह किस प्रकार की भाषा है? मैं जानना चाहता हूँ कृपया यहाँ सहायता करें ..
G dangi

2
ग्रूवी एक स्क्रिप्टिंग भाषा है जो एक जेवीएम में चलती है। यह मूल रूप से रूबी के लिए एक जावा उत्तर होने का इरादा है। यह एक सामान्य प्रयोजन की भाषा है लेकिन इसका उपयोग DSLs लिखने के लिए किया जा सकता है। docs.groovy-lang.org/docs/latest/html/documentation/…
चार्ली मार्टिन

1
मैं ग्रैडल के ग्रूवी को जोड़ना चाहूंगा। यदि गलत नहीं हैं, तो उनकी अपनी भाषा एक निर्माण का वर्णन है।
नियॉन वेज

67

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

DSL के उदाहरणों में सभी क्वेरी भाषाएँ (SQL, XPath, ...), सभी टेम्प्लेट लैंग्वेज (Django, Smarty, ...), शेल स्क्रिप्ट शामिल हैं, विशेष रूप से टवील जैसे सामान, एक कमांड संचालित वेब ब्राउज़र (ज्यादातर स्वचालित परीक्षण के लिए उपयोग किया जाता है) ), डेटा स्टोरेज और एक्सचेंज लैंग्वेज (XML, YAML, ...), और डॉक्यूमेंट लैंग्टेक्स, HTML या सीएसएस जैसी भाषाएँ।

टीसीएल और लिस्प जैसी बहुत लचीली वाक्य रचना वाली कुछ भाषाएं अपने DSL को सीधे भाषा में निर्मित करती हैं ... जब संभव हो। अधिकांश भाषाएं तार का उपयोग करती हैं, आमतौर पर बाहरी फ़ाइलों से लोड होती हैं।

क्या इनका उपयोग करने के कोई विशेष लाभ हैं? उनके इच्छित उद्देश्यों के लिए उनका उपयोग करना उस बिंदु के लिए बहुत फायदेमंद है जिस तरह से आप उन्हें जाने बिना बदल देंगे, ठीक उसी तरह जैसे आप (मैं मान कर) SQL या HTML का उपयोग किए बिना उन्हें डीएसएल समझे।

मैं कह सकता हूँ कि वहाँ किसी भी तरह के आवेदन के लिए आपके पास पर्याप्त डीएसएल की आवश्यकता हो सकती है; आप लगभग निश्चित रूप से सीखने की जरूरत नहीं है कि कैसे अपना एक लिखना है।


1
काफी मजेदार, एक उदाहरण जिसे आपने सूचीबद्ध नहीं किया है, वह पहला ऐसा है जो मुझे लगता है: regex
CoffeeTableEspresso

12

(प्रश्न के अंक को संबोधित करते हुए)

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

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


10

मुझे लगता है कि यह एक विशिष्ट डोमेन के लिए समस्याओं को हल करने के लिए उपयुक्त भाषा है। यह कुछ नियम-प्रसंस्करण भाषा या सेवा विवरण भाषा हो सकती है।

एक डोमेन विशिष्ट भाषा (DSL) के विपरीत एक सामान्य उद्देश्य वाली भाषा है


10

सब कुछ एक डीएसएल है ...

कोडांतरक: MOV R1 से R2
कंपाइलर: असाइनमेंट स्टेटमेंट - A = A + 1, कंडीशंस - IF (TRUE) ..., ब्रांच - RETURN
HTML: ... नेस्टेड स्ट्रक्चर
टीसीपी / आईपी का वर्णन करें: पते
पीडीएफ: कागज पर पाठ / छवि प्लेसमेंट का
वर्णन फ़ॉन्ट्स: वर्णों का वर्णन करें

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

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

मैं अन्य समाधानों का उपयोग करने से दूर रहूंगा जो सुविधाजनक हो सकते हैं, लेकिन HTML जैसी समस्या को फिट नहीं करते हैं जिसका उपयोग डेटा (एक्सएमएल) को परिभाषित करने के लिए किया गया था। CSV बहुत उपयोगी है, यह ज्यादातर समस्याओं के लिए उपयुक्त है। JSON उपयोग भाग की आसानी से फिट नहीं होता है, यह ओवरकिल है जो अनावश्यक जटिलताओं को जोड़ता है अधिकांश समस्या के लिए सीएसवी काम करता था। हम DSL के लिए बहुत उपयोग करते हैं, यह छोटी समस्याओं का वर्णन करने के लिए बहुत अच्छा काम करता है, 65K से 1M पंक्तियों के तहत, जैसे कि पेड़ की संरचनाएं या मेनू, कॉलम A स्तर है, अन्य कॉलम प्रतीक, रंग, लेबल और ऐसे हैं (EXCEL एक है) संपादन योग्य CSV)।

मैंने पाया कि HTML वास्तव में पेज लेआउट की समस्या को हल नहीं करता था, इसलिए मैंने इससे छुटकारा पा लिया और एक डीएसएल को परिभाषित किया जो फिट बैठता है। मैंने पृष्ठ पर 6 क्षेत्र, हेडर, बॉडी, फोटर, लेफ्ट / राइट मार्जिन और लेफ्ट / राइट फुल मार्जिंस परिभाषित किए। मैं तब पृष्ठ जनरेटर को विशिष्ट कोशिकाओं में एक TITLE BAR, STATUS BAR, MENUS, TABLE, FORMS, ..., जोड़ सकता था। इनमें से प्रत्येक सेल को तब किसी भी गहराई तक पंक्तियों और स्तंभों में विभाजित किया जा सकता है। पेज लेआउट किसी भी शैली के लिए सेकंड लेता है।

बॉडी में मेरे कर्मचारी की एक तालिका शामिल है
हेडर में कोलिन्स सॉफ्टवेयर में लॉगिन के साथ एक शीर्षक बार कैप्शन 'हैलो वर्ल्ड' है।

एक मेनू डीएसएल पृष्ठ लेआउट डीएसएल फिट नहीं होता है, इसलिए मैंने मेनू के लिए एक अद्वितीय डीएसएल बनाया।

संसाधन मेरा मुख्य मेनू
* परिभाषित: मेनू, मीटर, स्तर, लेबल, चिह्न, कार्रवाई;
मीटर, 0, फ़ाइल;
मी, 1, ओपन, ओपन.गिफ, डायलॉग ओपन फाइल;

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


8

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


5

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

सामान्य उद्देश्यों के लिए भाषा का उपयोग विशाल उद्देश्यों के लिए किया जाता है क्योंकि डीएसएल केवल विशिष्ट डोमेन के लिए बनाया जाता है। जैसे HTML या CSS।

आप कह सकते हैं कि यदि आपने किसी ऐसे कागज को निर्देश लिखा है जिसे केवल कोई व्यक्ति या आपका एकमात्र सबसे अच्छा दोस्त समझ सकता है और कोई नहीं कर सकता है। तब यह डीएसएल हो सकता है। लेकिन अगर आपने ऐसे शब्दों में निर्देश लिखे हैं, जिन्हें बहुत से लोग समझ सकते हैं और पालन कर सकते हैं तो यह डीएसएल नहीं है।

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


4

मैंने एक संक्षिप्त ब्लॉग पोस्ट पर चर्चा की है कि मुझे DSLs का उपयोग क्यों पसंद है:

मैं चाहता हूँ कि हम डोमेन विशिष्ट भाषाओं (DSLs) का उपयोग करें

इसमें, मैं एक डीएसएल को इस प्रकार परिभाषित करता हूं:

एक छोटी प्रोग्रामिंग भाषा विशेष रूप से समस्याओं के एक विशेष डोमेन के लिए समाधान संवाद करने के लिए डिज़ाइन की गई है।

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

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


3

डोमेन विशिष्ट भाषा (डीएसएल) के लिए एक सरल उदाहरण HTML है जो वेब-आधारित एप्लिकेशन नामक विशेष डोमेन के लिए उपयोग किया जाता है।


3

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

यह एक कस्टम-प्रोग्रामिंग की गई भाषा / रूपरेखा है जिसे आसन टीम ने अपने मंच के लिए बनाया है।

जैसा कि मैंने आगे पाया, कई कंपनियों ने उचित प्रतिस्पर्धात्मक लाभ बनाने के लिए अपने स्वयं के ढांचे और भाषाएं बनाईं, कुछ उदाहरण हैं:

  • अबप के साथ सैप
  • PeopleSoft PeopleCode के साथ
  • ऑब्जेक्टिव-सी के साथ एप्पल
  • फेसबुक में FBML और FQL जैसी चीजें हैं

वे डोमेन विशिष्ट हैं क्योंकि आप इन प्लेटफ़ॉर्म पर काम करने के लिए लगभग विशेष रूप से उनका उपयोग करेंगे।

मुझे उम्मीद है कि यह उत्तर आपको अवधारणा पर स्पष्ट करने में मदद करेगा।


3
ऑब्जेक्टिव-सी डोमेन विशिष्ट भाषा नहीं है
बोरसेओकसोन

यह भी (और) एप्पल द्वारा नहीं बनाया गया था।
अलेक्जेंडर

2

मशीन लर्निंग में प्रयुक्त DSL का एक उदाहरण अजगर में patsy है: https://patsy.readthedocs.io/en/latest/formulas.html#

जो R: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html से सूत्र DSL पर आधारित है

https://cran.r-project.org/web/packages/Formula/vignettes/Formula.pdf

और हैडली के पास अपनी उन्नत आर पुस्तक का एक अच्छा खंड है जो बताता है कि कैसे एक DSL w / R का निर्माण करना है: http://adv-r.had.co.nz/dsl.html

एक बार गहन शिक्षण क्षेत्र कुछ हद तक स्थिर हो जाता है (या अब भी) मैं अपाचे एमएक्सनेट परियोजना के अंदर कुछ इसी तरह की चीज देखना पसंद करूंगा। हालाँकि, मैंने अभी तक प्रस्ताव पृष्ठ पर इसके लिए कोई प्रस्ताव नहीं देखा है ।


1

डोमेन-विशिष्ट भाषाएं आपके डोमेन प्रक्रियाओं और ज्ञान को एक ऐसी भाषा में व्यक्त करती हैं जो सीधे आपके विशेष क्षेत्र से अवधारणाओं और तर्क का उपयोग करती है।

समुदाय निश्चित रूप से बढ़ रहा है लेकिन अभी भी अन्य "मुख्यधारा" प्रौद्योगिकियों के स्तर में नहीं है।

ज्यादातर समय, DSLs को कंपनियों के अंदर उत्पादकता में सुधार के लिए बनाया जाता है, इसलिए वे इसे निजी रखते हैं और अपने परिणाम / अंतर्दृष्टि साझा नहीं करते हैं।

यहां एक सम्मेलन है जहां स्पीकर ने प्रोजेक्ट एडिटिंग की तकनीक के साथ JetBrains MPS का उपयोग करते हुए DSL के कुछ उदाहरण दिए हैं : https://vimeo.com/197381453


1

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

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

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

cookie = async getCookie(cookieId)
user = async getUser(userId)
result async user.buy(cookie)
if (result.isError()) {
  error.showAlert("User has not enough money")
} else {
  confirmation.showSuccess("Cookie was bought")
}

ऊपर से कितना GPL (सामान्य प्रयोजन की भाषा) है और कितना विशिष्ट डोमेन शब्दावली और उपकरण है। यह दो का मिश्रण है, लेकिन सभी कमांड यहां डोमेन विशिष्ट हैं। कहा कि हम कह सकते हैं कि ऊपर DSL में लिखा गया है, जहाँ डोमेन कुछ अनुप्रयोग x है।

इस उदाहरण के साथ आगे बढ़ते हुए मैं और भी अधिक सार उपकरण बना सकता हूं, और ज्यादातर उन उपकरणों द्वारा नियंत्रण प्रवाह करता हूं, विचार करें (यह अधिक एफपी है, लेकिन आशा है कि आपको मेरा मतलब है)

waitForMany(getCookie(cookieId), getUser(userId)
  .andThen([cookie, user] -> user.buy(cookie))
  .andThen(showSuccess("Cookie was bought"))
  .whenError(showError("User has not enough money"))

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

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

क्या है डीएसएल, कई चीजें, उदाहरण के लिए कोई भी ढांचा जो नियमों का सेट प्रदान करता है वह डीएसएल है। यदि आप देखते हैं कि कोई व्यक्ति रिएक्ट डेवलपर का दावा कर रहा है, तो आप जानते हैं कि वह डोमेन स्पेसिफिक डेवलपर है, क्योंकि रिएक्ट बिल्कुल डीएसएल है जो कि मूल वेब प्लेटफॉर्म का उपयोग करने के लिए वैकल्पिक है। यदि आप मौजूदा डोमेन विशिष्ट टूल से कार्यक्षमता की रचना कर सकते हैं तो आप डीएसएल का उपयोग करके लिख रहे हैं। React में गहराई से जा रहे हैं, क्षमा करें सभी लोग इस डीएसएल से नहीं: डी, ​​आप घटकों के सेट बना सकते हैं, और उन्हें बिल्डिंग ब्लॉक्स के रूप में बना सकते हैं, और जल्दबाजी कर सकते हैं! अब आपने डीएसएल के शीर्ष पर डीएसएल बनाया।

हां, यहां कई बार डीएसपी दोहराया, माफ करना।

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