Integrated metaprogramming systems
Authors: Λιλής Ιωάννης 
Published: August 2021

Ο μεταπρογραμματισμός είναι ένα προηγμένο χαρακτηριστικό γλωσσών πουεπιτρέπει στα προγράμματα να αναμιγνύονται με ορισμούς που παράγουν κώδικα γιανα μπει στη θέση τους. Αυτοί οι ορισμοί ονομάζονται μεταπρογράμματα καιεκτελούνται κατά τη διάρκεια της μετάφρασης του κυρίως προγράμματος. Παρότι ταμεταπρογράμματα είναι ουσιαστικά προγράμματα, συχνά αντιμετωπίζονται ως ειδικέςπεριπτώσεις, χωρίς να μοιράζονται τις τρέχουσες προγραμματιστικές πρακτικές καιτα εργαλεία ανάπτυξης. Σε αυτό το πλαίσιο, τονίζουμε την ανάγκη της μεθοδολογικήςενοποίησης των μεταπρογραμμάτων και των κανονικών προγραμμάτων μέσω μιαςσυστηματικής πρότασης για ολοκληρωμένα συστήματα μεταπρογραμματισμού.Ειδικότερα, καλύπτουμε και υλοποιούμε πτυχές της γλώσσας, του μοντέλουπρογραμματισμού, της υποστήριξης εργαλείων και των πρακτικών ανάπτυξης.Εντοπίζουμε ένα σύνολο βασικών απαιτήσεων που σχετίζονται με την υλοποίηση τηςγλώσσα, τα χαρακτηριστικά του μεταπρογραμματισμού, την υποστήριξη τηςπαραγωγής λογισμικού, και τα περιβάλλοντα προγραμματισμού, οι οποίες είναιαπαραίτητες για την επίτευξη αυτής της ενοποίησης και παρέχουμε λεπτομέρειες γιατην αντιμετώπισή τους στην υλοποίηση ενός συστήματος μεταπρογραμματισμού.Ειδικότερα, εισάγουμε την έννοια των ενοποιημένων μεταπρογραμμάτων, ωςσυνεκτικά προγράμματα που συναρμολογούνται από συγκεκριμένα τμήματαμετακώδικα που βρίσκονται μέσα στον πηγαίο κώδικα. Αποδεικνύουμε τηνεκφραστικότητα αυτού του προγραμματιστικού μοντέλου και παρουσιάζουμε ταπλεονεκτήματα του ως προς την ανάπτυξη λογισμικού μέσω παραδειγμάτων πουαντικατοπτρίζουν απαιτητικά σενάρια σχετικά με χειρισμό εξαιρέσεων, σχεδιαστικάπρότυπα και σχεδίαση βασισμένη σε συμβόλαια. Στη συνέχεια, παρουσιάζουμε μια ολοκληρωμένη σειρά εργαλείων που αντιμετωπίζουν τα μεταπρογράμματα ωςβασικές οντότητες ενός περιβάλλοντος προγραμματισμού, ενσωματώνοντάς τα στηδιαχείριση του χώρου εργασίας και υποστηρίζοντάς τα με μια διαδικασίαμεταγλώττισης πλήρους κλίμακας. Επίσης αναλύουμε τον τρόπο με τον οποίοπαρέχουμε ακριβείς αναφορές για λάθη μεταγλώττισης καθώς και πλήρωςλειτουργική εκσφαλμάτωση πηγαίου κώδικα για μεταπρογράμματα.Σχετικά με την ενοποίηση του μοντέλου, δείχνουμε πώς ο προγραμματισμόςβασισμένος σε προοπτικές (Aspect-Oriented Programming), ένα προγραμματιστικόπαράδειγμα που αρχικά υφίσταντο μόνο για κανονικά προγράμματα, μπορεί ναεπεκταθεί και να εφαρμοστεί στο πλαίσιο του μεταπρογραμματισμού. Συγκεκριμένα,παρουσιάζουμε μια συστηματική πρόταση για την εισαγωγή προοπτικών σε όλα ταστάδια της διαδικασίας μεταγλώττισης σε ένα συστήματα μεταπρογραμματισμού.Επιπρόσθετα, αναλύουμε μια μέθοδο υλοποίησης που εφαρμόζει τις προοπτικές ωςπαρτίδες μετασχηματιστικών μεταπρογραμμάτων, τα οποία χρησιμοποιούν μια ειδικήβιβλιοθήκη για προοπτικές την οποία παρέχουμε. Συζητάμε πρακτικά σενάρια χρήσηςγια την προτεινόμενη πρακτική προοπτικών, ενώ παρουσιάζουμε τον τρόπο με τονοποίο η πλήρους κλίμακας εκσφαλμάτωση των προοπτικών σε επίπεδο πηγαίουκώδικα μπορεί να υποστηριχθεί κατά τη διάρκεια της μεταγλώττισης.Τέλος, προτείνουμε πρακτικές που χρησιμοποιούν μεταπρογραμματισμό για τηνεπίτευξη επαναχρησιμοποίησης σε μακροσκοπική κλίμακα. Σε αυτή την κατεύθυνση,παρουσιάζουμε μια μεθοδολογία για την υλοποίηση επαναχρησιμοποιήσιμωνσχεδιαστικών προτύπων και καλουπιών χειρισμού εξαιρέσεων, πραγματοποιώντας ταως βιβλιοθήκες μεταπρογραμματισμού που μπορούν να χρησιμοποιηθούν κατάπερίσταση. Επιπλέον, περιγράφουμε μια βελτιωμένη πρακτική για την ανάπτυξηλογισμικού που βασίζεται σε μοντέλα (Model-Driven Engineering) όπου οι έξοδοιτων εργαλείων μοντελοποίησης μετατρέπονται σε αφαιρετικά συντακτικά δέντρα(ASTs) που είναι μόνο για ανάγνωση αντί για πηγαίο κώδικα, στοχεύοντας στηνεπίλυση των εγγενών προβλημάτων συντήρησης αυτών των εργαλείων. Στηνπροσέγγισή μας, ο πηγαίος κώδικας της εφαρμογής χρησιμοποιείμεταπρογραμματισμό για να δημιουργήσει και να διαχειριστεί τα παραγόμενατμήματα κώδικα ως αφαιρετικά συντακτικά δέντρα, αντί να χτίζεται πάνω στονπαραγόμενο κώδικα με διάφορες τροποποιήσεις και επεκτάσεις.