Если вы реализуете метапрограммирование независимо от языка, вы получаете систему анализа и преобразования программ.Это именно тот инструмент, который рассматривает (произвольные) программы как данные.Они могут быть использованы для выполнения произвольных преобразований в произвольных программах.
Это также означает, что вы не ограничены конкретными функциями метапрограммирования, которые ребята из компилятора случайно добавили в ваш язык.Например, хотя в C ++ есть шаблоны, в нем нет «отражения».Но система трансформации программы может обеспечить отражение, даже если базовый язык не имеет его.В частности, наличие механизма преобразования программ означает, что вам никогда не придется говорить «Извините, ваш язык не поддерживает метапрограммирование (достаточно хорошо), поэтому я ничего не могу сделать, кроме написания кода вручную» * .
См. Наш инструментарий реинжиниринга программного обеспечения DMS для такой системы преобразования программ.Он использовался для создания инструментов тестирования и профилирования, инструментов генерации кода, инструментов для изменения архитектуры крупномасштабных приложений C ++, инструментов для переноса приложений из одного языка в другой, ... Это все чрезвычайно практично.Большинство задач, выполняемых с помощью DMS, было бы совершенно нецелесообразно выполнять вручную.