Раньше я думал, что метапрограммирование связано с модификацией программы и (как и некоторые ответы на Что такое отражение и почему это полезно?), что отражение состояло всего из интроспекция программы. Тем не менее, wiki тега отражения говорит
Отражение - это процесс, с помощью которого программа может наблюдать и изменить собственную структуру и поведение во время выполнения.
Отражение - это процесс, с помощью которого может выполняться программа самоанализ. Эта интроспекция обычно включает в себя способность наблюдать и изменять собственную структуру и поведение во время выполнения. Из теоретическое отражение перспективы связано с тем, что программа инструкции хранятся в виде данных. Различие между программным кодом и данные - это вопрос о том, как обрабатывается информация. Следовательно, программы могут обрабатывать свой собственный код как данные и наблюдать или изменять их.
[выделено курсивом]
И описание метапрограммирования -
Метапрограммирование - это программы, которые пишут или манипулируют другими программ в качестве их данных.
Метапрограммирование полезно, потому что оно может спасти программистов ценным время. Некоторые языки поддерживают метапрограмму, и это позволяет создавать код с большой выразительной способностью.
(Я предполагаю, что "write" не означает запись исходного кода в файл, потому что это будет генерация кода.)
Может ли это метапрограммирование только подмножества отражения?
Или термины различны, потому что некоторые языки программирования метапрограммируются другим языком, и в этом случае происходит метапрограммирование, но не отражение? (Было одно отдельное предложение, утверждающее это в метапрограммировании статьи в Википедии)
Или термины "отражение" и "метапрограммирование" используются по-разному в зависимости от того, какой язык программирования используется человеком?