Metaprogramarea este procesul de scriere a programelor de calculator care, la rândul lor, scriu alte programe. Procesul de metaprogramare permite o mai mare flexibilitate programatorilor de calculatoare, deoarece munca efectuată de obicei în timpul perioadei de rulare este alocată perioadei de timp de compilare. Acest proces eliberează timpul programatorului pentru a se concentra pe alte sarcini, deoarece reduce timpul necesar pentru scrierea manuală a codului unui program. Recopilarea este inutilă deoarece metaprogramarea permite programelor să abordeze situații noi cu o eficiență mai mare. „Metalimbaj” este termenul dat limbajului computerizat pe care metaprogramul îl folosește.
Limbajul obiect este limbajul de calculator al acelor programe care sunt scrise prin procesul de metaprogramare. Reflexivitate este un termen dat metalimbajului, care poate duce și la metaprogramare. Metaprogramarea funcționează în diferite moduri. O modalitate este ca interfața de programare a aplicației să permită codului de programare să acceseze interiorul motorului de rulare.
Un alt mod în care funcționează metaprogramarea este prin a permite programelor să scrie alte programe prin procesul de execuție dinamică. În acest caz, expresiile șir sunt utilizate în acest proces. Deși același limbaj poate fi utilizat în aceste două procese, nu este neobișnuit ca limbile să favorizeze un proces față de celălalt.
Metaprogramarea funcționează și prin eludarea limbajului. Permite modificarea limbilor prin sisteme de transformare a programelor. Această procedură oferă metaprogramarii libertatea de a folosi limbaje chiar dacă limbajul nu folosește nicio caracteristică de metaprogramare.
Nu este necesar un cod sursă pentru metaprogramare. Poate fi realizat printr-o compilare incrementală sau prin programe care pot fi modificate în timpul rulării. Limbajul computerului Lisp este limbajul preferat pentru procesul de metaprogramare. Acest lucru se datorează simplității acestui tip de limbaj informatic, precum și puterii sale.
Metaprogramarea care utilizează limbajul Lisp funcționează permițând evaluarea codului în perioada de timp de definire a programului, în contrast cu perioada de rulare. Acest proces face ca limbajul de metaprogramare și limbajul de programare gazdă să fie identice. Când se întâmplă acest lucru, aceste rutine Lisp pot fi reciclate pentru procesul de metaprogramare.
Alte limbi au folosit acest proces exact cu integrarea unui interpret de program. Acest interpret lucrează cu datele din program. Limbajele de programare specifice domeniului în metaprogramare sunt o altă formă care creează analizoare și analizoare lexicale. Acestea permit utilizatorului să folosească expresii regulate pentru a defini limbajul.