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


10

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

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


5
Это может быть не так часто; хотя он довольно распространен в Лиспе, Лисп не настолько распространен, даже в Common Lisp.
— Пол

явный или неявный? С одной стороны, использование Java и C #, возможно, является метапрограммированием, поскольку их компиляторы выводят языковые файлы, которые затем компилируются или интерпретируются. С другой стороны, почти никто не пишет код для генерации кода на языке, для которого они создали компилятор.
— Móż

Метапрограммирование повсеместно. Любой проект с открытым исходным кодом, использующий Autotools, использует метапрограммирование. MOC в мире Qt, tblgen в LLVM, T4 в многочисленных проектах .NET, практически любой веб-проект, генерирующий JavaScript, и так далее.
— SK-logic

Ответы:


5

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

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


Почему метапрограммирование шаблонов не является «генерацией кода»?!? Шаблоны C ++ полны по Тьюрингу, и вы можете генерировать произвольный сложный код.
— SK-logic

@ SK-logic: я имею в виду новый код, генерируемый по требованию во время выполнения. Шаблоны обрабатываются компилятором, вы можете видеть их как мощный вид макроса прекомпилятора.
— Wizard79

почему вы хотите генерировать код во время выполнения? Наиболее мощные формы метапрограммирования (как в Common Lisp, Racket, Template Haskell и т. Д.) Находятся во время компиляции.
— SK-logic

3

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


2

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

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


1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.