Περίληψη
Ο μεταπρογραμματισμός είναι ένα προηγμένο χαρακτηριστικό γλωσσών πουεπιτρέπει στα προγράμματα να αναμιγνύονται με ορισμούς που παράγουν κώδικα γιανα μπει στη θέση τους. Αυτοί οι ορισμοί ονομάζονται μεταπρογράμματα καιεκτελούνται κατά τη διάρκεια της μετάφρασης του κυρίως προγράμματος. Παρότι ταμεταπρογράμματα είναι ουσιαστικά προγράμματα, συχνά αντιμετωπίζονται ως ειδικέςπεριπτώσεις, χωρίς να μοιράζονται τις τρέχουσες προγραμματιστικές πρακτικές καιτα εργαλεία ανάπτυξης. Σε αυτό το πλαίσιο, τονίζουμε την ανάγκη της μεθοδολογικήςενοποίησης των μεταπρογραμμάτων και των κανονικών προγραμμάτων μέσω μιαςσυστηματικής πρότασης για ολοκληρωμένα συστήματα μεταπρογραμματισμού.Ειδικότερα, καλύπτουμε και υλοποιούμε πτυχές της γλώσσας, του μοντέλουπρογραμματισμού, της υποστήριξης εργαλείων και των πρακτικών ανάπτυξης.Εντοπίζουμε ένα σύνολο βασικών απαιτήσεων που σχετίζονται με την υλοποίηση τηςγλώσσα, τα χαρακτηριστικά του μεταπρογραμματισμού, την υποστήριξη τηςπαραγωγής λογισμικού, και τα περιβάλλ ...
Ο μεταπρογραμματισμός είναι ένα προηγμένο χαρακτηριστικό γλωσσών πουεπιτρέπει στα προγράμματα να αναμιγνύονται με ορισμούς που παράγουν κώδικα γιανα μπει στη θέση τους. Αυτοί οι ορισμοί ονομάζονται μεταπρογράμματα καιεκτελούνται κατά τη διάρκεια της μετάφρασης του κυρίως προγράμματος. Παρότι ταμεταπρογράμματα είναι ουσιαστικά προγράμματα, συχνά αντιμετωπίζονται ως ειδικέςπεριπτώσεις, χωρίς να μοιράζονται τις τρέχουσες προγραμματιστικές πρακτικές καιτα εργαλεία ανάπτυξης. Σε αυτό το πλαίσιο, τονίζουμε την ανάγκη της μεθοδολογικήςενοποίησης των μεταπρογραμμάτων και των κανονικών προγραμμάτων μέσω μιαςσυστηματικής πρότασης για ολοκληρωμένα συστήματα μεταπρογραμματισμού.Ειδικότερα, καλύπτουμε και υλοποιούμε πτυχές της γλώσσας, του μοντέλουπρογραμματισμού, της υποστήριξης εργαλείων και των πρακτικών ανάπτυξης.Εντοπίζουμε ένα σύνολο βασικών απαιτήσεων που σχετίζονται με την υλοποίηση τηςγλώσσα, τα χαρακτηριστικά του μεταπρογραμματισμού, την υποστήριξη τηςπαραγωγής λογισμικού, και τα περιβάλλοντα προγραμματισμού, οι οποίες είναιαπαραίτητες για την επίτευξη αυτής της ενοποίησης και παρέχουμε λεπτομέρειες γιατην αντιμετώπισή τους στην υλοποίηση ενός συστήματος μεταπρογραμματισμού.Ειδικότερα, εισάγουμε την έννοια των ενοποιημένων μεταπρογραμμάτων, ωςσυνεκτικά προγράμματα που συναρμολογούνται από συγκεκριμένα τμήματαμετακώδικα που βρίσκονται μέσα στον πηγαίο κώδικα. Αποδεικνύουμε τηνεκφραστικότητα αυτού του προγραμματιστικού μοντέλου και παρουσιάζουμε ταπλεονεκτήματα του ως προς την ανάπτυξη λογισμικού μέσω παραδειγμάτων πουαντικατοπτρίζουν απαιτητικά σενάρια σχετικά με χειρισμό εξαιρέσεων, σχεδιαστικάπρότυπα και σχεδίαση βασισμένη σε συμβόλαια. Στη συνέχεια, παρουσιάζουμε μια ολοκληρωμένη σειρά εργαλείων που αντιμετωπίζουν τα μεταπρογράμματα ωςβασικές οντότητες ενός περιβάλλοντος προγραμματισμού, ενσωματώνοντάς τα στηδιαχείριση του χώρου εργασίας και υποστηρίζοντάς τα με μια διαδικασίαμεταγλώττισης πλήρους κλίμακας. Επίσης αναλύουμε τον τρόπο με τον οποίοπαρέχουμε ακριβείς αναφορές για λάθη μεταγλώττισης καθώς και πλήρωςλειτουργική εκσφαλμάτωση πηγαίου κώδικα για μεταπρογράμματα.Σχετικά με την ενοποίηση του μοντέλου, δείχνουμε πώς ο προγραμματισμόςβασισμένος σε προοπτικές (Aspect-Oriented Programming), ένα προγραμματιστικόπαράδειγμα που αρχικά υφίσταντο μόνο για κανονικά προγράμματα, μπορεί ναεπεκταθεί και να εφαρμοστεί στο πλαίσιο του μεταπρογραμματισμού. Συγκεκριμένα,παρουσιάζουμε μια συστηματική πρόταση για την εισαγωγή προοπτικών σε όλα ταστάδια της διαδικασίας μεταγλώττισης σε ένα συστήματα μεταπρογραμματισμού.Επιπρόσθετα, αναλύουμε μια μέθοδο υλοποίησης που εφαρμόζει τις προοπτικές ωςπαρτίδες μετασχηματιστικών μεταπρογραμμάτων, τα οποία χρησιμοποιούν μια ειδικήβιβλιοθήκη για προοπτικές την οποία παρέχουμε. Συζητάμε πρακτικά σενάρια χρήσηςγια την προτεινόμενη πρακτική προοπτικών, ενώ παρουσιάζουμε τον τρόπο με τονοποίο η πλήρους κλίμακας εκσφαλμάτωση των προοπτικών σε επίπεδο πηγαίουκώδικα μπορεί να υποστηριχθεί κατά τη διάρκεια της μεταγλώττισης.Τέλος, προτείνουμε πρακτικές που χρησιμοποιούν μεταπρογραμματισμό για τηνεπίτευξη επαναχρησιμοποίησης σε μακροσκοπική κλίμακα. Σε αυτή την κατεύθυνση,παρουσιάζουμε μια μεθοδολογία για την υλοποίηση επαναχρησιμοποιήσιμωνσχεδιαστικών προτύπων και καλουπιών χειρισμού εξαιρέσεων, πραγματοποιώντας ταως βιβλιοθήκες μεταπρογραμματισμού που μπορούν να χρησιμοποιηθούν κατάπερίσταση. Επιπλέον, περιγράφουμε μια βελτιωμένη πρακτική για την ανάπτυξηλογισμικού που βασίζεται σε μοντέλα (Model-Driven Engineering) όπου οι έξοδοιτων εργαλείων μοντελοποίησης μετατρέπονται σε αφαιρετικά συντακτικά δέντρα(ASTs) που είναι μόνο για ανάγνωση αντί για πηγαίο κώδικα, στοχεύοντας στηνεπίλυση των εγγενών προβλημάτων συντήρησης αυτών των εργαλείων. Στηνπροσέγγισή μας, ο πηγαίος κώδικας της εφαρμογής χρησιμοποιείμεταπρογραμματισμό για να δημιουργήσει και να διαχειριστεί τα παραγόμενατμήματα κώδικα ως αφαιρετικά συντακτικά δέντρα, αντί να χτίζεται πάνω στονπαραγόμενο κώδικα με διάφορες τροποποιήσεις και επεκτάσεις.
περισσότερα
Περίληψη σε άλλη γλώσσα
Metaprogramming is an advanced language feature enabling to mix programs withdefinitions that generate source code to be put in their place. Such definitions arecalled metaprograms and are executed during the translation of the main program.While metaprograms are essentially programs they are mostly treated as special caseswithout sharing the current programming practices and development tools. In thiscontext, we emphasize the need for a methodological integration betweenmetaprograms and normal programs presenting a systematic proposition towardsintegrated metaprogramming systems. We cover and implement aspects related tolanguage, programming model, tool support and deployment practices.We identify a set of primary requirements related to language implementation,metaprogramming features, software engineering support, and programmingenvironments, that are necessary to achieve such integration and elaborate onaddressing them in the implementation of a metaprogramming system. In particula ...
Metaprogramming is an advanced language feature enabling to mix programs withdefinitions that generate source code to be put in their place. Such definitions arecalled metaprograms and are executed during the translation of the main program.While metaprograms are essentially programs they are mostly treated as special caseswithout sharing the current programming practices and development tools. In thiscontext, we emphasize the need for a methodological integration betweenmetaprograms and normal programs presenting a systematic proposition towardsintegrated metaprogramming systems. We cover and implement aspects related tolanguage, programming model, tool support and deployment practices.We identify a set of primary requirements related to language implementation,metaprogramming features, software engineering support, and programmingenvironments, that are necessary to achieve such integration and elaborate onaddressing them in the implementation of a metaprogramming system. In particular,we introduce the notion of integrated metaprograms, as coherent programs assembledfrom specific meta-code fragments present in the source code. We prove theexpressiveness of this programming model and illustrate its software engineeringadvantages through case studies that reflect demanding scenarios of exceptionhandling, design patterns and design by contract. Then we present an integrated toolchainthat treats metaprograms as first-class citizens of the programming environment,incorporating them into the workspace management and supporting them with a fullscalebuild process. We also elaborate on the way we provide precise compile-errorreporting and full-power source-level debugging facilities for metaprograms. Regarding model integration, we show how Aspect-Oriented Programming (AOP), aparadigm originally considered only for normal programs, is effectively extended andapplied in a metaprogramming context. In particular, we present a systematicproposition for introducing aspect orientation in the entire processing pipeline of ametaprogramming system. Additionally, we discuss an implementation approachtreating aspects as batches of transformation metaprograms, the latter deploying acustom AOP-related library we offer. Example scenarios are discussed demonstratinghow the proposed aspect system is used in practice, while we present how full-scalesource-level aspect debugging is facilitated during the program compilation process.Finally, we propose deployment practices that utilize metaprogramming to achievereusability at a macroscopic scale. In this direction, we present a methodology forimplementing reusable design patterns and exception handling templates by realizingthem as metaprogram libraries that can be deployed on demand. We also discuss animproved Model-Driven Engineering (MDE) practice where the outcomes of MDEtoolsbecome read-only Abstract Syntax Trees (ASTs) instead of source code toresolve the inherent maintenance issues in such tools. In our approach the applicationsource code involves metaprogramming to deploy and manipulate the generated codefragments as ASTs, instead of being built around the generated code with custommodifications and extensions.
περισσότερα