Μεταπρογραμματισμός
From Wikipedia, the free encyclopedia
Remove ads
Ο όρος Μεταπρογραμματισμός (Αγγλικά: Metaprogramming) χαρακτηρίζει τα προγράμματα υπολογιστών τα οποία μπορούν να τροποποιούν προγράμματα. Για παράδειγμα ένα πρόγραμμα μπορεί κατά την διάρκεια της μεταγλώττισης να παράγει κώδικα ο οποίος στην συνέχεια μεταγλωττίζεται και δημιουργείται το εκτελέσιμο αρχείο σε γλώσσα μηχανής. [1] Ο μεταπρογραμματισμός είναι όρος που χαρακτηρίζει τα «προγράμματα που παράγουν προγράμματα», δηλαδή προγράμματα τα οποία τροποποιούν/δημιουργούν πηγαίο κώδικα. Στην γλώσσα C++ ο μεταπρογραμματισμός συσχετίζεται με τον προγραμματισμό με χρήση πρότυπων templates. [2] Σε γλώσσες σεναρίων (scripting languages) όπως η Ruby ο μεταπρογραμματισμός αναφέρεται στην δυνατότητα να προσθέτουμε νέο εκτελέσιμο κώδικα ο οποίος τροποποιεί την συμπεριφορά του προγράμματος κατά την εκτέλεση (runtime). [3] Στην γλώσσα Ruby ο μεταπρογραμματισμός βασίζεται στο API που επιτρέπει ανάκλαση. [4]
Remove ads
Παραδείγματα
Παρακάτω παρουσιάζονται δύο παραδείγματα μεταπρογραμματισμού. Στην C++ ο κώδικας (template metaprogramming) δημιουργείται κατά την διάρκεια της μεταγλώττισης ενώ στην Ruby κατά της διάρκεια εκτέλεσης (runtime).
C++
Το παρακάτω παράδειγμα είναι παράδειγμα μεταπρογραμματισμού προτύπων (template metaprogramming) στην γλώσσα C++. Ο κώδικας της συνάρτησης Factorial (υπολογίζει το παραγοντικό ενός αριθμού) γίνεται κατά την διάρκεια μεταγλώττισης του προγράμματος. [5]
#include<iostream>
template<unsigned N> struct Factorial {
enum { value = N * Factorial<N-1>::value };
};
template<> struct Factorial<0> {
enum { value = 1 };
};
int main(){
std::cout << Factirial<5>::value; // τυπώνει τον 5! = 120
std::cout << Factorial<10>::value; // τυπώνει τον 10! = 3628800
return 0;
}
Ruby
Έστω ότι έχουμε μια κλάση acct στην Ruby η οποία υλοποιεί την λειτουργία ενός τραπεζικού λογαριασμού όπου με την μέθοδο deposit προσθέτουμε δολάρια στον λογαριασμό.
acct.deposit(100)
Στην Ruby όλα είναι αντικείμενα, ακόμη και ένας αριθμός βρίσκεται κάτω από την κλάση Numeric η οποία παρέχεται από την γλώσσα. Μπορούμε με βάση τον μεταπρογραμματισμό να ανοίξουμε την κλάση αυτή και να προσθέσουμε μια μέθοδο η οποία μετατρέπει τα ευρώ σε δολάρια [3]:
class Numeric
def euros
# το 1.38 είναι η παράμετρος μετατροπής ευρώ => δολάρια
self * 1.38
end
end
Τώρα μπορούμε να καλέσουμε την acct.deposit(100.euros) και αυτόματα τα 100 ευρώ μετατρέπονται ως δολάρια πριν περάσουν μέσα στην μέθοδο deposit.
acct.deposit(100.euros)
Remove ads
Δείτε επίσης
- Ανάκλαση (υπολογιστές)
- Beazley, David (23 Μαρτίου 2013). Python 3 Metaprogramming (στα Αγγλικά). Pycon US 2013. Συμβαίνει στα 00:00. Ανακτήθηκε στις 19 Μαΐου 2014.
Παραπομπές
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads