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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।