В "Pragmatic Programmer" Хант и Томас различают генераторы пассивного и активного кода.
Пассивные генераторы запускаются один раз, после чего вы редактируете результат.
Активные генераторы запускаются так часто, как необходимо, и вы никогда не должны редактировать результат, потому что он будет заменен.
ИМО, последние гораздо ценнее, потому что они приближаются к принципу СУХОЙ (не повторяйся).
Если входная информация для вашей программы может быть разделена на две части, часть, которая изменяется редко (A) (например, метаданные или DSL), и часть, которая отличается при каждом запуске программы (B) ( оперативный ввод), вы можете написать программу-генератор, которая принимает только A в качестве входных данных, и записывает специальную программу, которая принимает только B в качестве входных данных.
(Другое название для этого - частичная оценка.)
Программа генератора более проста, потому что она должна проходить только через вход A, а не A и B. Кроме того, она не должна быть быстрой, потому что она запускается не часто, и ей не нужно заботиться об утечках памяти. .
Специальная программа работает быстрее, потому что ей не нужно разбираться с вводом, который почти всегда одинаков (A). Это проще, потому что он должен принимать решения только о входе B, а не A и B.
Хорошая идея, чтобы сгенерированная специальная программа была достаточно читабельной, чтобы в ней можно было легко находить любые ошибки. Как только вы удалите ошибки из генератора, они исчезнут навсегда.
В одном проекте, над которым я работал, команда спроектировала сложное приложение базы данных со спецификацией проектирования толщиной в два дюйма и длительным графиком реализации, чреватой проблемами с производительностью. Написав генератор кода, два человека выполнили эту работу за три месяца, а листинги исходного кода (на С) были толщиной около половины дюйма, и сгенерированный код был настолько быстрым, что его не было проблемой. Специальная программа обновлялась еженедельно по тривиальной стоимости.
То есть генерация активного кода, , когда вы можете использовать его , является беспроигрышным . И я думаю, что не случайно именно это и делают компиляторы.