Наскільки поширене метапрограмування? [зачинено]


10

Як часто ви чи бачили, як метапрограмування використовується у проектах? В університеті я ніколи не бачив, щоб це було застосовано, але я бачив це на своїй попередній роботі (коли я побачив це, я здувся, наскільки це було ефективно).

Але наскільки це часто? Він використовується весь час, або просто зрідка?


5
Це може бути не так часто; Хоча цілком поширений у Ліспі, Лісп не такий поширений - навіть не звичайний Лісп.
— Павло

явна чи неявна? В одному крайньому випадку використання Java і C #, можливо, метапрограмування, оскільки їх компілятори виводять файли мови, які потім компілюються або інтерпретуються. З іншого боку, майже ніхто не пише код для генерування коду мовою, для якої вони створили компілятор.
— Móż

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

Відповіді:


5

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

На мою думку, однак, метапрограмування є чимось складнішим, що передбачає фактичне генерування коду, а тому досить рідкісне, навіть у мовах сценаріїв.


Чому метапрограмування шаблонів не є "фактичним генерацією коду"?!? Шаблони C ++ завершені Тьюрінгом, і ви можете генерувати довільний складний код.
— SK-логіка

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

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

3

Я думаю, що це сильно залежить від того, якою мовою ви користуєтесь. Звичайні люди з Lisp, ймовірно, справедливо використовують це - протокол мета-об'єкта дозволяє чіткі речі прозорі / ортогональної стійкості, наприклад, - і Smalltalkers використовують його часто.


2

Це, як правило, часто і послідовно відображається в проектах Common Lisp. Перевірте OnLisp та Let Over Lambda для отримання пояснень / розуміння.

Якщо ви лише шукаєте приклади (і знаєте CL), перегляньте сховище Antiweb ; під обкладинками відбувається велика кількість метапрограмування.


1

За останні два роки перший біт програмування нового завдання майже завжди був написанням коду для написання коду. Існує багато тонких табличок, пов'язаних з взаємодією з базою даних, яку можна спростити до автоматичного створення сценарію. Подумайте про речі, де вам потрібно запитати 3 таблиці, щоб сформувати об’єкт чи щось подібне. Навіщо писати це самостійно, якщо є 10 таких речей, які можуть змінитися в майбутньому?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.