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


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.