DOT DSL

DOT DSL

मध्यम

निर्देश

एक डोमेन स्पेसिफिक लैंग्वेज (DSL) एक छोटी भाषा होती है जो किसी खास क्षेत्र के लिए बनाई जाती है। चूँकि DSL किसी खास क्षेत्र के लिए बनाई जाती है, यह लिखने वाले को यह घोषित करने का मौका देती है कि उसे क्या चाहिए, न कि कैसे। इससे उत्पादकता और समझ पर बड़ा असर पड़ सकता है।

जटिल कस्टमाइज़ेशन और कॉन्फिगरेशन एक ऐसा क्षेत्र है जहाँ इनका इस्तेमाल होता है।

उदाहरण के लिए, DOT भाषा की मदद से आप किसी ग्राफ का टेक्स्ट में विवरण लिख सकते हैं। फिर Graphviz के किसी टूल (जैसे dot) की मदद से उस विवरण को एक तस्वीर में बदल दिया जाता है। एक साधारण ग्राफ ऐसा दिखता है:

graph {
    graph [bgcolor="yellow"]
    a [color="red"]
    b [color="blue"]
    a -- b [color="green"]
}

इसे example.dot फाइल में रखकर dot example.dot -T png -o example.png चलाने पर एक इमेज example.png बनती है, जिसमें पीले बैकग्राउंड पर हरी रेखा से जुड़े लाल और नीले वृत्त होते हैं।

Graphviz की dot भाषा जैसी एक डोमेन स्पेसिफिक लैंग्वेज लिखिए।

हमारी DSL Graphviz की dot भाषा जैसी है, क्योंकि हमारी DSL का इस्तेमाल भी ग्राफ डेटा स्ट्रक्चर बनाने के लिए होगा। लेकिन DOT भाषा से अलग, हमारी DSL एक इंटरनल DSL होगी, जिसका इस्तेमाल सिर्फ हमारी भाषा में ही होगा।

इंटरनल और एक्सटर्नल DSL के अंतर के बारे में और जानिए।

अपना खुद का DSL बनाइए

इस अभ्यास में आप पूरी तरह स्वतंत्र हैं: अपने सपनों वाला ग्राफ DSL आप जैसा चाहें बना सकते हैं।

हो सकता है आप टैग और रिकॉर्ड की सूचियों पर आधारित DSL बनाना चाहें, कुछ इस तरह:

my_graph =
    Graph.create([
        Title("My Graph"),
        Node("a", { color: Green }),
        Node("b", { color: Blue }),
        Edge("a", "b", { style: Dotted }),
    ])

या फिर आप फंक्शन कॉल की श्रृंखला पर आधारित DSL पसंद करें, कुछ इस तरह:

my_graph =
    Graph.create()
        .with_title("My Graph")
        .add_node("a", Attr.create().with_color(Green))
        ...

या फिर आपके मन में कुछ और ही हो? तो कर डालिए! टेस्ट सिर्फ इतना चाहते हैं कि आप कुछ खास ग्राफ बनाइए। उन्हें बनाने का तरीका पूरी तरह आप पर है।

फिर भी, एक DSL आम तौर पर तब बेहतर होता है जब वह स्पष्ट हो, संक्षिप्त हो और बहुत चौंकाने वाला न हो (जैसे कि minus फंक्शन घटाने के लिए है, दो नोड के बीच एज बनाने के लिए नहीं, जैसा कि node("a") - node("b") में होता है)।

मज़े को दोगुना करना चाहें तो आप एक to_dot फंक्शन बनाकर देख सकते हैं, जो आपके ग्राफ को DOT फॉर्मेट में बदल देता है!


स्रोत

Wikipediaयह लिंक एक नई विंडो या टैब में खुलता है
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Roc Exercism

DOT DSL शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Roc को 126 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।