Ολοκληρωμένα συστήματα μεταπρογραμματισμού: γλώσσα, εργαλεία και πρακτικές

 
This item is provided by the institution :
University of Crete
Repository :
E-Locus Institutional Repository
see the original item page
in the repository's web site and access all digital files if the item*
share



2014 (EN)
Integrated metaprogramming systems : language, tools and practices
Ολοκληρωμένα συστήματα μεταπρογραμματισμού: γλώσσα, εργαλεία και πρακτικές

Λίλης, Ιωάννης

Σμαραγδάκης, Ιωάννης
Μαρκάτος, Ευάγγελος
Αυγερίου, Πάρης
Πλεξουσάκης, Δημήτρης
Σαββίδης, Αντώνης

Metaprogramming is an advanced language feature enabling to mix programs with definitions that generate source code to be put in their place. Such definitions are called metaprograms and are executed during the translation of the main program. While metaprograms are essentially programs they are mostly treated as special cases without sharing the current programming practices and development tools. In this context, we emphasize the need for a methodological integration between metaprograms and normal programs presenting a systematic proposition towards integrated metaprogramming systems. We cover and implement aspects related to language, programming model, tool support and deployment practices. We identify a set of primary requirements related to language implementation, metaprogramming features, software engineering support, and programming environments, that are necessary to achieve such integration and elaborate on addressing them in the implementation of a metaprogramming system. In particular, we introduce the notion of integrated metaprograms, as coherent programs assembled from specific meta-code fragments present in the source code. We prove the expressiveness of this programming model and illustrate its software engineering advantages through case studies that reflect demanding scenarios of exception handling, design patterns and design by contract. Then we present an integrated tool-chain that treats metaprograms as first-class citizens of the programming environment, incorporating them into the workspace management and supporting them with a full-scale build process. We also elaborate on the way we provide precise compile-error reporting and full-power source-level debugging facilities for metaprograms. Regarding model integration, we show how Aspect-Oriented Programming (AOP), a paradigm originally considered only for normal programs, is effectively extended and applied in a metaprogramming context. In particular, we present a systematic proposition for introducing aspect orientation in the entire processing pipeline of a metaprogramming system. Additionally, we discuss an implementation approach treating aspects as batches of transformation metaprograms, the latter deploying a custom AOP-related library we offer. Example scenarios are discussed demonstrating how the proposed aspect system is used in practice, while we present how full-scale source-level aspect debugging is facilitated during the program compilation process. Finally, we propose deployment practices that utilize metaprogramming to achieve reusability at a macroscopic scale. In this direction, we present a methodology for implementing reusable design patterns and exception handling templates by realizing them as metaprogram libraries that can be deployed on demand. We also discuss an improved Model-Driven Engineering (MDE) practice where the outcomes of MDE-tools become read-only Abstract Syntax Trees (ASTs) instead of source code to resolve the inherent maintenance issues in such tools. In our approach the application source code involves metaprogramming to deploy and manipulate the generated code fragments as ASTs, instead of being built around the generated code with custom modifications and extensions. (EL)
Ο μεταπρογραμματισμός είναι ένα προηγμένο χαρακτηριστικό γλωσσών που επιτρέπει στα προγράμματα να αναμιγνύονται με ορισμούς που παράγουν κώδικα για να μπει στη θέση τους. Αυτοί οι ορισμοί ονομάζονται μεταπρογράμματα και εκτελούνται κατά τη διάρκεια της μετάφρασης του κυρίως προγράμματος. Παρότι τα μεταπρογράμματα είναι ουσιαστικά προγράμματα, συχνά αντιμετωπίζονται ως ειδικές περιπτώσεις, χωρίς να μοιράζονται τις τρέχουσες προγραμματιστικές πρακτικές και τα εργαλεία ανάπτυξης. Σε αυτό το πλαίσιο, τονίζουμε την ανάγκη της μεθοδολογικής ενοποίησης των μεταπρογραμμάτων και των κανονικών προγραμμάτων μέσω μιας συστηματικής πρότασης για ολοκληρωμένα συστήματα μεταπρογραμματισμού. Ειδικότερα, καλύπτουμε και υλοποιούμε πτυχές της γλώσσας, του μοντέλου προγραμματισμού, της υποστήριξης εργαλείων και των πρακτικών ανάπτυξης. Εντοπίζουμε ένα σύνολο βασικών απαιτήσεων που σχετίζονται με την υλοποίηση της γλώσσα, τα χαρακτηριστικά του μεταπρογραμματισμού, την υποστήριξη της παραγωγής λογισμικού, και τα περιβάλλοντα προγραμματισμού, οι οποίες είναι απαραίτητες για την επίτευξη αυτής της ενοποίησης και παρέχουμε λεπτομέρειες για την αντιμετώπισή τους στην υλοποίηση ενός συστήματος μεταπρογραμματισμού. Ειδικότερα, εισάγουμε την έννοια των ενοποιημένων μεταπρογραμμάτων, ως συνεκτικά προγράμματα που συναρμολογούνται από συγκεκριμένα τμήματα μετακώδικα που βρίσκονται μέσα στον πηγαίο κώδικα. Αποδεικνύουμε την εκφραστικότητα αυτού του προγραμματιστικού μοντέλου και παρουσιάζουμε τα πλεονεκτήματα του ως προς την ανάπτυξη λογισμικού μέσω παραδειγμάτων που αντικατοπτρίζουν απαιτητικά σενάρια σχετικά με χειρισμό εξαιρέσεων, σχεδιαστικά πρότυπα και σχεδίαση βασισμένη σε συμβόλαια. Στη συνέχεια, παρουσιάζουμε μια ολοκληρωμένη σειρά εργαλείων που αντιμετωπίζουν τα μεταπρογράμματα ως βασικές οντότητες ενός περιβάλλοντος προγραμματισμού, ενσωματώνοντάς τα στη διαχείριση του χώρου εργασίας και υποστηρίζοντάς τα με μια διαδικασία μεταγλώττισης πλήρους κλίμακας. Επίσης αναλύουμε τον τρόπο με τον οποίο παρέχουμε ακριβείς αναφορές για λάθη μεταγλώττισης καθώς και πλήρως λειτουργική εκσφαλμάτωση πηγαίου κώδικα για μεταπρογράμματα. Σχετικά με την ενοποίηση του μοντέλου, δείχνουμε πώς ο προγραμματισμός βασισμένος σε προοπτικές (Aspect-Oriented Programming), ένα προγραμματιστικό παράδειγμα που αρχικά υφίσταντο μόνο για κανονικά προγράμματα, μπορεί να επεκταθεί και να εφαρμοστεί στο πλαίσιο του μεταπρογραμματισμού. Συγκεκριμένα, παρουσιάζουμε μια συστηματική πρόταση για την εισαγωγή προοπτικών σε όλα τα στάδια της διαδικασίας μεταγλώττισης σε ένα συστήματα μεταπρογραμματισμού. Επιπρόσθετα, αναλύουμε μια μέθοδο υλοποίησης που εφαρμόζει τις προοπτικές ως παρτίδες μετασχηματιστικών μεταπρογραμμάτων, τα οποία χρησιμοποιούν μια ειδική βιβλιοθήκη για προοπτικές την οποία παρέχουμε. Συζητάμε πρακτικά σενάρια χρήσης για την προτεινόμενη πρακτική προοπτικών, ενώ παρουσιάζουμε τον τρόπο με τον οποίο η πλήρους κλίμακας εκσφαλμάτωση των προοπτικών σε επίπεδο πηγαίου κώδικα μπορεί να υποστηριχθεί κατά τη διάρκεια της μεταγλώττισης. Τέλος, προτείνουμε πρακτικές που χρησιμοποιούν μεταπρογραμματισμό για την επίτευξη επαναχρησιμοποίησης σε μακροσκοπική κλίμακα. Σε αυτή την κατεύθυνση, παρουσιάζουμε μια μεθοδολογία για την υλοποίηση επαναχρησιμοποιήσιμων σχεδιαστικών προτύπων και καλουπιών χειρισμού εξαιρέσεων, πραγματοποιώντας τα ως βιβλιοθήκες μεταπρογραμματισμού που μπορούν να χρησιμοποιηθούν κατά περίσταση. Επιπλέον, περιγράφουμε μια βελτιωμένη πρακτική για την ανάπτυξη λογισμικού που βασίζεται σε μοντέλα (Model-Driven Engineering) όπου οι έξοδοι των εργαλείων μοντελοποίησης μετατρέπονται σε αφαιρετικά συντακτικά δέντρα (ASTs) που είναι μόνο για ανάγνωση αντί για πηγαίο κώδικα, στοχεύοντας στην επίλυση των εγγενών προβλημάτων συντήρησης αυτών των εργαλείων. Στην προσέγγισή μας, ο πηγαίος κώδικας της εφαρμογής χρησιμοποιεί μεταπρογραμματισμό για να δημιουργήσει και να διαχειριστεί τα παραγόμενα τμήματα κώδικα ως αφαιρετικά συντακτικά δέντρα, αντί να χτίζεται πάνω στον παραγόμενο κώδικα με διάφορες τροποποιήσεις και επεκτάσεις. (EN)

text

Τεχνολογία λογισμικού
Model-driven engineering
Integrated development environments
Software reuse
Ολοκληρωμένα περιβάλλοντα προγραμματισμού
Aspect-oriented programming
Programming languages
Γλώσσες προγραμματισμού
Software engineering

Πανεπιστήμιο Κρήτης (EL)
University of Crete (EN)

2014-01-28




*Institutions are responsible for keeping their URLs functional (digital file, item page in repository site)