Περίληψη
Οι Γλώσσες Ειδικού Πεδίου (Domain-specific Languages), γνωστές και ως μικρό-γλώσσες (mi- cro languages), αποτελούν γλώσσες προγραμματισμού των οποίων ο σχεδιασμός εστιάζει στην αντιμετώπιση προβλημάτων ενός συγκεκριμένου πεδίου ενδιαφέροντος. Πολύ συχνά, οι γλώσσες ειδικού πεδίου χρησιμοποιούνται στη βελτιστοποίηση της διαδικασίας ανάπτυξης λογισμικού (Soft- ware Development Process). Γνωστές γλώσσες ειδικού πεδίου αποτελούν οι κανονικές εκφράσεις (regular expressions), η γλώσσα markdown και η SQL. Στην αντίπερα όχθη, οι Γενικές Γλώσσες Προγραμματισμού (General-purpose Languages) έχουν ευρύτερες δυνατότητες. Αυτές παρέχουν όλες τις απαραίτητες δομές επεξεργασίας οι οποίες τις καθιστούν αποδοτικές σε ένα μεγαλύτερο εύρος προβλημάτων. Τυπικά παραδείγματα γενικών γλωσσών προγραμματισμού αποτελούν οι γλώσσες Java, C++ και Scala. Οι σύγχρονες προσεγγίσεις στην ανάπτυξη λογισμικού επιβάλουν οι γλώσσες ειδικού πεδίου να χρησιμοποιούνται παράλληλα με τις γενικές γλώσσες προγραμματισμού. Για πα ...
Οι Γλώσσες Ειδικού Πεδίου (Domain-specific Languages), γνωστές και ως μικρό-γλώσσες (mi- cro languages), αποτελούν γλώσσες προγραμματισμού των οποίων ο σχεδιασμός εστιάζει στην αντιμετώπιση προβλημάτων ενός συγκεκριμένου πεδίου ενδιαφέροντος. Πολύ συχνά, οι γλώσσες ειδικού πεδίου χρησιμοποιούνται στη βελτιστοποίηση της διαδικασίας ανάπτυξης λογισμικού (Soft- ware Development Process). Γνωστές γλώσσες ειδικού πεδίου αποτελούν οι κανονικές εκφράσεις (regular expressions), η γλώσσα markdown και η SQL. Στην αντίπερα όχθη, οι Γενικές Γλώσσες Προγραμματισμού (General-purpose Languages) έχουν ευρύτερες δυνατότητες. Αυτές παρέχουν όλες τις απαραίτητες δομές επεξεργασίας οι οποίες τις καθιστούν αποδοτικές σε ένα μεγαλύτερο εύρος προβλημάτων. Τυπικά παραδείγματα γενικών γλωσσών προγραμματισμού αποτελούν οι γλώσσες Java, C++ και Scala. Οι σύγχρονες προσεγγίσεις στην ανάπτυξη λογισμικού επιβάλουν οι γλώσσες ειδικού πεδίου να χρησιμοποιούνται παράλληλα με τις γενικές γλώσσες προγραμματισμού. Για παράδειγμα, η ενσωμάτωση της SQL σε διάφορες γενικές γλώσσες προγραμματισμού αποτέλεσε το πεδίο ενδια- φέροντος για πολλούς ερευνητές. Στην περίπτωση της Java, για την ενσωμάτωση της γλώσσας προγραμματισμού χρησιμοποιείται η βιβλιοθήκη εφαρμογής της Συνδετικότητας Βάσης Δεδομένων (JDBC, Java Database Connectivity). Ο προγραμματιστής εκτελεί το ερώτημα SQL στη βάση ως συμβολοσειρά (string). Μέσω αυτής της διαδικασίας ο μεταγλωττιστής της Java (Java compiler) αγνοεί εντελώς την SQL που περιέχεται στον κώδικα της Java, με αποτέλεσμα πολλά σφάλματα τύπων (type errors) ή συντακτικά σφάλματα (syntax errors) να εντοπίζονται τελικά κατά την εκτέλεση του προγράμματος. Ορισμένα από τα εν λόγω σφάλματα παραμένουν μη ανιχνεύσιμα ακόμα και μετά από παρατεταμένες δοκιμές κατά το στάδιο ανάπτυξης του λογισμικού. Υπάρχουν βέβαια και πιο εξελιγμένες μέθοδοι, η πλειοψηφία των οποίων χρησιμοποιούν κοινές τεχνικές προερχόμενες από μεταγλωττιστές και μεταπρογραμματισμό. Όλες όμως αυτές οι προσεγ- γίσεις πάσχουν κατά κανόνα ατό μια ή παραπάνω από τις κάτωθι αδυναμίες: - Αντιμετωπίζουν το πρόβλημα για ένα μόνο ζεύγος γλωσσών, μια γλώσσα ειδικού πεδίου και μια γλώσσα γενικού προγραμματισμού. Η ενσωμάτωση και άλλων γλωσσών ειδικού πεδίου είτε δεν υποστηρίζεται ή υποστηρίζεται μέσω πολύπλοκων συντακτικών μηχανισμών. - Συστήνουν σύνθετες λύσεις οι οποίες επιβαρύνουν τις κύριες γλώσσες προγραμματισμού, υποχρεώνοντας τους προγραμματιστές να χρησιμοποιούν πολύπλοκες σημασιολογίες οι οπ- οίες δεν είναι εναρμονισμένες με τη φιλοσοφία της εκάστοτε γλώσσας προγραμματισμού και των καλών πρακτικών προγραμματισμού. - Δεν είναι πρακτικές, αφού εισαγάγουν νέες γλώσσες προγραμματισμού, οι οποίες ενώ αντιμετωπίζουν το πρόβλημα αποτελεσματικά, απαιτούν την επανεγγραφή πολύπλοκων βιβλιοθηκών εφαρμογής για την εκάστοστε γλώσσα ειδικού πεδίου. Οι προτεινόμενες γλώσσες προγραμματισμού αποτελούν την επέκταση μιας υπάρχουσας γλώσσας, ή μιας νέας γλώσσας με τελείως διαφορετική σύνταξη. Η παρούσα διδακτορική διατριβή εισαγάγει την J%(j-mod), μια επέκταση της Java για την αποδοτική υποστήριξη γλωσσών ειδικού πεδίου. H επέκταση J% παρέχει έναν τρόπο ενσωμάτωσης γλωσσών ειδικού πεδίου στην Java με τη μορφή τμημάτων (modules) στον μεταγλωττιστή. Κατα την συγγραφή της παρούσης, το J% υποστηρίζει τη γλώσσα SQL και τις κανονικές εκφράσεις. Εκμεταλεύεται τις ήδη υπάρχουσες προγραμματιστικές διεπαφές της Java, όπως για παράδειγμα τη βιβλιοθήκη της Συνδετικότητας Βάσης Δεδομένων (JDBC). Εισαγάγει δε, τα κάτωθι χαρακτηρiστικά: - Τμηματικό Σχεδιασμό- Στατικό Έλεγχο Τύπων- Έλεγχος Συνταντικού Γλώσσας Ειδικού Πεδίου- Διατήρηση Συντακτικού Γλώσσας Ειδικού Πεδίου- Πρακτική- Βελτιστοποιήσεις Ειδικού Πεδίου
περισσότερα
Περίληψη σε άλλη γλώσσα
Domain-specific Languages (DSL), also known as micro-languages or little languages, are programming languages designed to specifically solve problems within a particular do- main. They are used to improve the efficiency of the software development process. Well-known DSLs include regular expressions, markdown and SQL. On the contrary, General-purpose languages (GPL) have a wider scope. They provide a set of processing capabilities applicable to different problem domains. Typical examples of GPLs are Java, C++ and Scala. In modern software engineering approaches, DSLs are often used together with GPLs. For example, the integration of SQL with various GPLs constitutes a field that drew the attention of researchers and of practitioners. For the case of Java, the language integration is executed with the use of a JDBC (Java Database Connectivity) application library. The programmer has to pass the SQL query to the database as a string. Through this process, the Java compiler is completely ...
Domain-specific Languages (DSL), also known as micro-languages or little languages, are programming languages designed to specifically solve problems within a particular do- main. They are used to improve the efficiency of the software development process. Well-known DSLs include regular expressions, markdown and SQL. On the contrary, General-purpose languages (GPL) have a wider scope. They provide a set of processing capabilities applicable to different problem domains. Typical examples of GPLs are Java, C++ and Scala. In modern software engineering approaches, DSLs are often used together with GPLs. For example, the integration of SQL with various GPLs constitutes a field that drew the attention of researchers and of practitioners. For the case of Java, the language integration is executed with the use of a JDBC (Java Database Connectivity) application library. The programmer has to pass the SQL query to the database as a string. Through this process, the Java compiler is completely oblivious to the SQL language contained within the Java code with many SQL syntax and type errors detected at runtime. Such errors remain undiscovered, even with extensive testing during the development process. There are more sophisticated methods; many of them use common compiler, metaprogramming and generative programming techniques and methodologies. All those approaches suffer from one or more of the following weaknesses: - They deal with the problem for only one DSL-GPL pair. The integration of other DSLs is either not supported or supported via complex mechanisms. - They recommend complex solutions that syntactically burden mainstream programming languages, obliging programmers to remember difficult semantics that are not aligned with the language philosophy and best practices. - They are not practical, since they offer new programming languages that deal with the problem efficiently, and this usually requires a complete rewrite of complex DSL systems. The proposed programming languages are an extension of an existing language, or a language with a completely new syntax.
This thesis introduces J% (j-mod), a DSL-aware extension of the Java programming language. J% provides an extensible way to embed DSLs into Java in the form of compiler modules. So far, it supports SQL and regular expressions. It facilitates existing Java DSL APIs, for example SQL support uses the standard JDBC application library. However, this is not a requirement and a module can translate DSL code to the host language or even directly to JVM bytecode. It introduces the following new characteristics: - Modular Design - Static Typing- DSL Syntax Validation- Retain DSL Syntax- Pragmatic- Domain-specific Optimisations
περισσότερα