Касаемо последней фразы - можно поспопорить. Напоминаю собравшимся
что термин "метапрограммирование" можно понимать как препроцессирование программ. Или что то же самое, программной манипуляцией фрагментами других
программ. (Если этим способен заниматься сам язык над собой же, то
это называется рефлексией). Представим, что препроцессированием,
оно же метапрограммированием занимается какой-то специально
созданный язык и соответственно, существует отдельная программа, собирающая итоговую программу из частей исходной программы. Важным условием является что метапрограмма (попросту говоря - язык препроцессора) владеет ВСЕЙ информацией о подопечной программе. В чем же заключается идиотизм, если мы разделяем метапрограмму и основную программу, надо которой идет манипуляция? Просматривается первый очевидный плюс - метапрограммы можно переиспользовать. Второй - изоляция метапрограмм, их может контролировать (иметь доступ) другой человек или другое, более совершенное средство-утилита, а может быть (в каких-то фантастических случаях и операционная система) или они могут быть абстрактным утвержденным набором. Это я умалчиваю о логическом разделении концепций и обязанностей, что свойственно для инженерии.