Περίληψη |
Ο μεταπρογραμματισμός είναι η ικανότητα
διαχείρισης του πηγαίου κώδικα ως πρώτης κλάσης
δεδομένα
στο μετα-πρόγραμμα και εισαγωγής τους στο πρόγραμμα. Στον
μεταπρογραμματισμό
πολλαπλών επιπέδων
η παραπάνω διαδικασία μπορεί να επαναληφθεί σε άπειρο βάθος,
δημιουργώντας δυνητικά άπειρη αναδρομή.
Συνήθως η γλώσσα μεταπρογραμματισμού είναι
διαφορετική από την κανονική γλώσσα προγράμματος.
Στην δουλεία μας,
εστιάζουμε στην
JavaScript
και την επεκτείνουμε, υποστηρίζοντας
μεταπρογραμματισμό.
Προς αυτήν την κατεύθυνση
δημιουργήσαμε ένα σύστημα
μεταπρογραμματισμού όπου η απλή γλώσσα είναι υποσύνολο της μετα-γλώσσας και
μοιράζονται την ίδια υλοποίηση. Υλοποιήσαμε τον μεταπρογραμματισμό επεκτείνοντας την
ανοιχτού λογισμικού μηχανή
JavaScript
SpiderMonkey
του
Mozilla. Υποδείξαμε τις
μινιμαλιστικές αλλαγές που χρειάζεται το
SpiderMonkey
κάνοντας επεκτάσεις στο
λεξικογραφικό αναλυτή, στο συντακτικό αναλυτή, στις εσωτερικές δομές το αφαιρετικού
συντακτικού δέντρου (ΑΣΔ), τις συναρτήσεις βιβλιοθήκης, τους μηχανισμούς ανάλυσης της
γλώσσας, καθώς και την προσθήκη ενός συστήματος για αποσφαλμάτωση του ΑΣΔ. Στην δική
μας προσέγγιση κάθε στάδιο του μεταπρογραμματισμού είναι μια ανεξάρτητη οντότητα όπου
συλλέγει τα μετα-σύμβολα για το συγκεκριμένο βάθος, σεβόμενο την σειρά, δημιουργώντας ένα
ανεξάρτητο πρόγραμμα.
Επαληθεύουμε την υλοποίηση μας έχοντας δημιουργήσει μία εφαρμογή ηλεκτρονικού
ταχυδρομείου χρησιμοποιώντας μεταπρογραμματισμό για να παράξουμε αυτόματα τον κώδικα
για τις σελίδες της εφαρμογής. Επίσης, μελετήθηκαν επαναληπτικά μοτίβα πυγαίου κώδικα σε
JavaScript,
από βιβλιοθήκες που
χρησιμοποιούνται
στην βιομηχανία, και τις βελτιστοποιήσαμε
στα πλαίσια του μεταπρογραμματισμού με σκοπό να πετύχουμε καλύτερη απόδοση και βέλτιστη
επαναχρησιμοποίηση τους. Τέλος, υποστηρίζουμε την αποσφαλμάτωση του μετα-κώδικα
απευθείας στο περιβάλλον του προγράμματος
περιήγησης. Για αυτό το σκοπό υλοποιήσαμε μία
εφαρμογή σε μορφή ιστοσελίδας που
επικοινωνεί
με το κομμάτι αποσφαλμάτωσης του
SpiderMonkey. Η εφαρμογή προσφέρει χρήσιμα εργαλεία για την αποσφαλμάτωση του μετα-προγράμματος όπως την απεικόνιση των ΑΣΔ, την εξαγωγή του κώδικα που αντιστοιχεί σε κάθε
κόμβο του ΑΣΔ, καθώς και
χρήσιμες
πληροφορίες για το περιβάλλον εκτέλεσης.
|