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 με έναν κόκκινο και έναν μπλε κύκλο ενωμένους με μια πράσινη γραμμή πάνω σε κίτρινο φόντο.

Γράψε μια Γλώσσα Ειδικού Τομέα παρόμοια με τη γλώσσα dot της Graphviz.

Η DSL μας μοιάζει με τη γλώσσα dot της Graphviz στο ότι θα χρησιμοποιηθεί για τη δημιουργία δομών δεδομένων γράφων. Ωστόσο, σε αντίθεση με τη γλώσσα 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 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.