Метапрограммирование — программы создают и модифицируют другие программы
Мета позволяет получать программы при меньших затратах времени и усилий на кодирование, чем если бы программист писал их вручную целиком, позволяет улучшить свойства кода, и упростить изменения дизайна программы (небольшое изменение в мета-коде вызывает значительные изменения порождённого кода).
Главное достоинство языков, имеющих полноценную поддержку мета — вы можете повышать уровень абстракции, расширяя язык, создавая специализированные диалекты базового языка для решения конкретных прикладных задач (eDSL).
Все mainstream языки программирования не имеют поддержки метапрограммирования, или она ограничена только в рамками одного языкового стека, при этом реализована более или менее упорото. Языки, ориентированные исключительно на метапрограммирование как основной метод, практически неизвестны (за исключением диалектов Лиспа, и современного С++).