Språket som et metaprogram er skrevet i kalles et metaspråk. Språk for programmer som er manipulert kalles . Når et programmeringsspråk selv har evnen til å være sitt eget metaspråk kalles dette refleksjon. Refleksjon er et kraftig verktøy i programmeringsspråk som legger til rette for metaprogrammering. I et språk hvor språket selv er en førsteklasses datatype (som i Lisp, Prolog, SNOBOL) er også veldig nyttig, dette er kjent som homoikonisitet. Generisk programmering benytter seg gjerne av en slags metaprogrammeringsfunksjonalitet i de språk som har støtte for det.