Metaprogramiranje je proces pisanja računalniških programov, ki nato pišejo druge programe. Proces metaprogramiranja omogoča večjo fleksibilnost računalniškim programerjem, ker je delo, ki je običajno opravljeno med izvajanjem, dodeljeno časovnemu obdobju prevajanja. Ta postopek sprosti programerju čas, da se osredotoči na druge naloge, ker skrajša čas, potreben za ročno pisanje kode programa. Ponovno prevajanje ni potrebno, ker metaprogramiranje omogoča programom, da se z večjo učinkovitostjo spopadejo z novimi situacijami. “Metajezik” je izraz za računalniški jezik, ki ga uporablja metaprogram.
Objektni jezik je računalniški jezik tistih programov, ki so napisani s postopkom meta programiranja. Refleksivnost je izraz za metajezik, ki lahko povzroči tudi metaprogramiranje. Metaprogramiranje deluje na različne načine. Eden od načinov je, da vmesnik za programiranje aplikacije omogoči programski kodi dostop do notranjosti izvajalnega mehanizma.
Drug način delovanja metaprogramiranja je, da se programom omogoči pisanje drugih programov skozi dinamični proces izvajanja. V tem primeru se v tem procesu uporabljajo izrazi nizov. Čeprav se lahko v teh dveh procesih uporablja isti jezik, ni nenavadno, da jeziki dajejo prednost enemu procesu pred drugim.
Metaprogramiranje deluje tudi tako, da zaobide jezik. Omogoča spreminjanje jezikov s sistemi preoblikovanja programov. Ta postopek daje metaprogramiranju svobodo uporabe jezikov, tudi če jezik ne uporablja nobenih značilnosti metaprogramiranja.
Za metaprogramiranje izvorna koda ni potrebna. To je mogoče narediti s postopno kompilacijo ali s programi, ki jih je mogoče spremeniti med izvajanjem. Računalniški langaugae Lisp je priljubljen jezik za proces metaprogramiranja. To je posledica preprostosti te vrste računalniškega jezika in njegove moči.
Metaprogramiranje, ki uporablja jezik Lisp, deluje tako, da omogoča vrednotenje kode v časovnem obdobju definicije programa, v nasprotju z obdobjem izvajanja. Ta proces naredi metaprogramski jezik in gostiteljski programski jezik enak. Ko se to zgodi, je mogoče te Lispove rutine reciklirati za proces metaprogramiranja.
Drugi jeziki so uporabljali ta natančen postopek z integracijo programskega tolmača. Ta tolmač deluje s podatki v programu. Domensko specifični programski jeziki v metaprogramiranju so druga oblika, ki ustvarja razčlenjevalnike in leksikalne analizatorje. Te uporabniku omogočajo uporabo regularnih izrazov za opredelitev jezika.