Является ли метапрограммирование подмножеством рефлексии?

Раньше я думал, что метапрограммирование включает в себя модификацию программы, и (как и некоторые ответы на Что такое рефлексия и почему она полезна? ) что рефлексия просто состоит из интроспекции программы. Однако в вики-теге "Отражение" говорится, что

Отражение - это процесс, с помощью которого программа может наблюдать и изменять свою собственную структуру и поведение во время выполнения.

Отражение - это процесс, с помощью которого программа может выполнять интроспекцию. Эта интроспекция обычно включает в себя способность наблюдать и изменять свою собственную структуру и поведение во время выполнения. С точки зрения теоретической точки зрения рефлексия связана с тем фактом, что программные инструкции хранятся как данные. Различие между программным кодом и данными - это вопрос того, как обрабатывается информация. Следовательно, программы могут рассматривать свой собственный код как данные и наблюдать или модифицировать их.

[выделено автором]

А описание метапрограммирования таково:

Метапрограммирование - это написание программ, которые пишут или манипулируют другими программами как своими данными. программами как своими данными.

Метапрограммирование полезно, потому что оно может сэкономить программистам драгоценное время. Некоторые языки поддерживают метапрограммирование и это позволяет создавать код с большой выразительной силой.

(Я предполагаю, что "писать" не означает записывать исходный код в файл, потому что это было бы генерацией кода.)

Это делает метапрограммирование просто подмножеством рефлексии?

Или эти термины различны, потому что некоторые языки программирования метапрограммируются другим языком, и в этом случае метапрограммирование имеет место, но не рефлексия? (В статье Википедии метапрограммирование)

Или термины "отражение" и "метапрограммирование" используются по-разному в зависимости от того, какой язык программирования использует человек?

20
задан Community 23 May 2017 в 10:31
поделиться