Metaprogramowanie
Metaprogramowanie - technika umożliwiająca programom tworzenie lub modyfikację kodu innych programów (lub ich samych). Program będący w stanie modyfikować lub generować kod innego programu nazywa się metaprogramem.
Wykorzystanie zasad metaprogramowania pozwala na przykład na dynamiczną modyfikację programu podczas jego kompilacji.
Metaprogramy pisze się w metajęzykach. Jeśli język jest jednocześnie swoim metajęzykiem, to taką cechę nazywamy refleksyjnością (ang. reflexivity).
Metaprogramowanie może polegać nie tylko na generowaniu kodu, ale również na modyfikacjach w czasie wykonania programu. Takie możliwości dają języki Lisp, Smalltalk, PHP, Python, Ruby, Tcl oraz Perl.
[edytuj] Przykłady
Przykładem prostego metaprogramu jest ten skrypt w bashu:
#!/bin/bash # metaprogram echo '#!/bin/bash' >program for ((I=1; I<=992; I++)) do echo "echo $I" >>program done chmod +x program
Program ten generuje 993 linie, wypisujące liczby od 1 do 992. Nie jest to zbyt efektywny sposób na wypisanie liczb 1-992, ale ilustruje jak w kilka minut można stworzyć program o długości 1000 linii.
Dość analogiczny program w języku python wersji 3.0:
from os import system as system clay = open( "adam.py", "w" ) clay.write( "print( \"Madam, i'm Adam.\" )" ) clay.close() system("python3.0 adam.py")
Jeśli umieścimy powyższy kod w pliku i uruchomimy go to program wygeneruje plik/program adam.py i uruchomi go, a ten wypisze "Madam, i'm Adam.". Warto wspomnieć, że Python posiada kilka funkcji ułatwiających metaprogramowanie np. exec() czy execFile().
Poniżej analogiczny kod w scheme:
(define adam "adam.scm") (define clay (open-output-file adam)) (display "(display " clay) (write "Madam, i'm Adam." clay) (display ")" clay) (close-output-port clay) (load adam)