Προγραμματισμός

Δημιουργία DSL στην Java, Μέρος 1: Τι είναι μια γλώσσα για συγκεκριμένο τομέα;

Εάν έχετε γράψει ποτέ ένα makefile ή έχετε σχεδιάσει μια ιστοσελίδα με CSS, έχετε ήδη συναντήσει μια DSL ή μια συγκεκριμένη γλώσσα τομέα. Τα DSL είναι μικρές, εκφραστικές γλώσσες προγραμματισμού προσαρμοσμένες ειδικά για συγκεκριμένες εργασίες. Σε αυτήν τη σειρά τεσσάρων μερών, το Venkat Subramaniam παρουσιάζει την έννοια των DSL και τελικά σας δείχνει πώς να τα δημιουργήσετε χρησιμοποιώντας Java. Σε αυτό το πρώτο άρθρο, ο Venkat εξηγεί τι είναι ένα DSL και καθορίζει τη διαφορά μεταξύ ενός εξωτερικού DSL και ενός εσωτερικού. Στη συνέχεια, επισημαίνει ορισμένα DSL που πιθανότατα χρησιμοποιείτε για χρόνια, ίσως χωρίς καν να το συνειδητοποιήσετε.

Εάν έχετε ασχοληθεί με τη γραφή ή ακόμα και με τη χρήση εφαρμογών, οι πιθανότητες είναι ότι έχετε ήδη συναντήσει γλώσσες συγκεκριμένου τομέα ή DSL - ακόμη και αν δεν το συνειδητοποιήσατε τότε. Ένα αρχείο εισαγωγής λέξεων-κλειδιών σε μια εφαρμογή που λαμβάνει δεδομένα εισόδου είναι ένα DSL. Ένα αρχείο διαμόρφωσης είναι ένα DSL. Το makefile είναι ένα DSL που χρησιμοποιείται για τον καθορισμό κανόνων και εξαρτήσεων για τη δημιουργία μιας εφαρμογής. Εάν έχετε γράψει κάτι από αυτά, έχετε ήδη κάνει τα πρώτα σας βήματα για τη δημιουργία γλωσσών για συγκεκριμένο τομέα.

Η λέξη Γλώσσα στη φράση μπορεί να σας οδηγήσει να περιμένετε ότι ένα DSL θα χρησιμοποιούσε σύνταξη για να εκφράσει συγκεκριμένη σημασιολογία. Σε αντίθεση με μια γλώσσα γενικής χρήσης όπως η Java, ένα DSL είναι αρκετά περιορισμένο σε εύρος και δυνατότητες. Όπως υποδηλώνει το όνομα, τα DSL εστιάζουν έντονα σε έναν συγκεκριμένο τύπο προβλήματος ή τομέα και στην έκφραση ενός στενού συνόλου λύσεων στο πλαίσιο αυτού του περιορισμένου πεδίου. Και αυτό είναι καλό - τα DSL είναι απλά και συνοπτικά.

Εντάξει, αυτό είναι L; τι γίνεται με τους D και S;

Η λέξη τομέα στο DSL αναφέρεται σε "μια περιοχή ή μια σφαίρα γνώσεων, επιρροής ή δραστηριότητας". (Για περισσότερες πληροφορίες, ανατρέξτε στο Σχεδίαση βάσει τομέα από τον Eric Evans.) Η εστίαση σε έναν τομέα σας δίνει ένα συμφραζόμενα - ένα λογικό πλαίσιο μέσα στο οποίο μπορείτε να εξελίξετε μοντέλα για μια εφαρμογή.

Η λέξη ειδικός στο DSL σας δίνει το οριοθετημένο πλαίσιο. Σας βοηθά να διατηρείτε τα πράγματα σχετικά, εστιασμένα, στενά και εκφραστικά.

Η απλότητα είναι κρίσιμη για την επιτυχία ενός DSL. Ένα άτομο εξοικειωμένο με τον τομέα της γλώσσας πρέπει να το κατανοήσει εύκολα. Για παράδειγμα, εάν δημιουργείτε ένα DSL που θα χρησιμοποιούν οι αναλογιστές για να εκφράσουν επιχειρηματικούς κανόνες στον τομέα της ασφάλισης, δεν θέλετε να ξοδεύουν πολύ χρόνο μαθαίνοντας μια δύσκολη και περίπλοκη γλώσσα. Θέλετε να εστιάσουν στην έκφραση των λεπτομερειών που σχετίζονται με τους ασφαλιστικούς κινδύνους με τρόπο που μπορούν εύκολα να κατανοήσουν, να συζητήσουν, να εξελιχθούν και να διατηρήσουν. Το DSL που δημιουργείτε για αυτούς πρέπει να βασίζεται στο λεξιλόγιό τους, τους όρους που χρησιμοποιούν κάθε μέρα για να επικοινωνούν με τους συναδέλφους τους. Θέλετε να χρησιμοποιούν τη σύνταξη που παρέχετε, αλλά πρέπει να φαίνεται ότι απλώς καθορίζουν ορισμένους διακριτούς κανόνες. Και θα πρέπει να μπορούν να το κάνουν χωρίς να έχουν την εντύπωση ότι προγραμματίζουν πραγματικά ή ακόμη και χρησιμοποιούν κάποιο είδος γλώσσας.

Η δημιουργία ενός καλού DSL είναι σαν να μαγειρεύετε ένα θρεπτικό γεύμα. ακριβώς όπως θέλετε τα παιδιά να τρώνε λαχανικά χωρίς να τα συνειδητοποιούν και να ταλαιπωρούν, θέλετε οι πελάτες να χρησιμοποιούν το DSL σας χωρίς να ανησυχούν για τη σύνταξή του.

Η συνοπτικότητα είναι ένα άλλο μέρος της σύνταξης ενός καλού DSL, που σημαίνει την επιλογή σύνταξης που είναι τόσο σύντομη και εκφραστική. Η ακεραιότητα μέσα στον λόγο καθιστά τον κώδικά σας ευκολότερο στην ανάγνωση και τη συντήρηση. Η εκφραστικότητα συμβάλλει στην προώθηση της επικοινωνίας, της κατανόησης και της ταχύτητας. Για παράδειγμα, για κάποιον που κατανοεί τον πολλαπλασιασμό της μήτρας, matrixA.multiply (matrixB); είναι λιγότερο εκφραστική και περιεκτική matrixA * matrixB. Το πρώτο περιλαμβάνει λειτουργίες κλήσης και χρήση παρενθέσεων, και περιλαμβάνει ερωτηματικό ερωτηματικό. Το τελευταίο είναι ήδη μια έκφραση που θα είναι αρκετά οικεία.