भेद करना कठिन है, और प्रयुक्त भाषा पर निर्भर है। यह व्यक्तिपरक भी है।
क्लोजर में, आप एपीआई को परिभाषित कर सकते हैं जो डीएसएल की तरह दिखते हैं। छूट के लिए, हिचकी आपको html उत्पन्न करने की अनुमति देती है:
(html [:span {:class "foo"} "bar"])
इसे लिस्प सिंटैक्स के साथ डीएसएल माना जा सकता है। तथ्य यह है कि html
एक मैक्रो हो सकता है यह शक्ति का एक ही देता है जैसे कि आप एक html लिख रहे थे एस-भाव के साथ काम करना (देखें sxml )
अजगर में, एक ही एपीआई की तरह लग सकता है:
html(["span", {"class" : "foo"}, "bar"])
html एक फंक्शन है। इसके तर्क का मूल्यांकन पहले किया जाएगा, और फिर फ़ंक्शन कॉल होगा। तथ्य यह है कि अजगर वाक्यविन्यास अधिक विशिष्ट है, और अजगर शब्दार्थ अधिक सख्त हैं इसका मतलब यह है कि इस अभिव्यक्ति को भाषा के DSL स्वतंत्र के रूप में व्याख्या करना कठिन है।
एक क्लासिक भाषा का प्रतिनिधित्व डेटा संरचना की तरह एक पेड़ है और इसके नोड्स पर पुनरावर्ती नामक एक विकसित कार्य है। LISP भाषाएँ इस पेड़ की संरचना को बहुत स्पष्ट बनाती हैं, इसलिए किसी भी नेस्टेड फ़ंक्शन कॉल अंतर्निहित भाषा सुविधा से अप्रभेद्य है। यही कारण है कि LISP समुदाय लगभग हर चीज के लिए DSLs के बारे में बात करता है।
मेरा मानना है कि प्रोग्रामिंग उपयोगी सार प्रदान करने के बारे में है। मुझे लगता है कि आप जो कुछ भी बनाते हैं, वह एक जटिल समस्या को हल करने में लोगों की मदद करने वाले भाषा तत्वों के रूप में आपके द्वारा बनाई गई (एक देयता या यहां तक कि यूआई) अधिकांश चीजों को डिजाइन करने का एक प्रभावी तरीका है। इस दृष्टिकोण के साथ, मैं यह दावा करता हूं कि प्रत्येक पुस्तकालय डीएसएल हैं, लेकिन उनमें से कुछ खराब तरीके से डिज़ाइन किए गए हैं :-)