摘要:Although widely used in software engineering, metaprogramming is often misunderstood. The researchers often disagree what concepts characterize metaprogramming. The concepts of metaprogramming are often used without acknowledging the usage of metaprogramming itself. We overview the examples and definitions of metaprogramming in computer science, identify, describe and discuss the fundamental concepts of metaprogramming (code generation, transformation, reflection, generalization, metaprogram, metadata, level of abstraction and separation of concerns). We analyze their relationship and present taxonomy, based on a study of sources on metaprogramming.