Насколько распространено метапрограммирование? [закрыто]

10

Как часто вы или вы видели метапрограммирование в проектах? В университете я никогда не видел, чтобы это применялось, но я видел это на своей предыдущей работе (когда я увидел это, я был поражен тем, насколько эффективно это было).

Но как часто это происходит? Используется ли он постоянно или просто время от времени?

gablin
источник
5
Это может быть не так часто; хотя он довольно распространен в Лиспе, Лисп не настолько распространен, даже в Common Lisp.
Пол
явный или неявный? С одной стороны, использование Java и C #, возможно, является метапрограммированием, поскольку их компиляторы выводят языковые файлы, которые затем компилируются или интерпретируются. С другой стороны, почти никто не пишет код для генерации кода на языке, для которого они создали компилятор.
Móż
Метапрограммирование повсеместно. Любой проект с открытым исходным кодом, использующий Autotools, использует метапрограммирование. MOC в мире Qt, tblgen в LLVM, T4 в многочисленных проектах .NET, практически любой веб-проект, генерирующий JavaScript, и так далее.
SK-logic

Ответы:

5

Если вы считаете рефлексию разновидностью метапрограммирования, это относительно распространено. Для некоторых людей даже общее программирование (шаблоны и шаблоны) является формой метапрограммирования, так что это еще более распространено.

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

Wizard79
источник
Почему метапрограммирование шаблонов не является «генерацией кода»?!? Шаблоны C ++ полны по Тьюрингу, и вы можете генерировать произвольный сложный код.
SK-logic
@ SK-logic: я имею в виду новый код, генерируемый по требованию во время выполнения. Шаблоны обрабатываются компилятором, вы можете видеть их как мощный вид макроса прекомпилятора.
Wizard79
почему вы хотите генерировать код во время выполнения? Наиболее мощные формы метапрограммирования (как в Common Lisp, Racket, Template Haskell и т. Д.) Находятся во время компиляции.
SK-logic
3

Я думаю, это сильно зависит от того, какой язык вы используете. Обычные люди на Лиспе, вероятно, справедливо его используют - например, протокол мета-объектов обеспечивает прозрачную / ортогональную постоянную аккуратность - и Smalltalkers часто его используют.

Фрэнк Шиарар
источник
2

Он часто и последовательно появляется в проектах Common Lisp. Проверьте OnLisp и Let Over Lambda для некоторого объяснения / понимания.

Если вы только после примеров (и знаете CL), проверьте хранилище Antiweb ; под прикрытием происходит много метапрограммирования.

Inaimathi
источник
1

За последние два года первым делом программирования новой задачи почти всегда было написание кода для написания кода. Существует множество шаблонов, связанных с взаимодействием с базой данных, которые можно упростить вплоть до автоматической генерации сценариев. Подумайте о вещах, где вам нужно запросить 3 таблицы, чтобы сформировать объект или что-то подобное. Зачем писать сами, если есть 10 таких вещей, которые могут измениться в будущем?

Wheaties
источник