Во-первых - я не думаю, что согласен с вашим утверждением, что «метапрограммирование - это« будущее кодирования »». Это отличный инструмент, но не всем это нравится (например, дизайнеры Java оставляют макросы из языка намеренно - не то, что мне нравится Java, но люди do имеют основания возражать против метапрограммирования).
В любом случае ... Я могу представить два разных способа выполнения метапрограммирования: на уровне синтаксиса и во время выполнения.
Для синтаксиса метапрограммирования я думаю, что схема - хороший вариант (если вы не упомянули простоту и т. Д., Я бы предложил Common Lisp). Для метаданных во время выполнения я думаю, что и Prolog, и Smalltalk очень интересно. (Вы можете добавлять, изменять и удалять факты в базу данных Prolog на лету, и вы можете менять объекты Smalltalk на лету в). Возможно, вы тоже можете выполнять метапрограммирование во время выполнения в Ruby, но я не знаю Ruby.
Так что в схеме несколько различных методов метапрограммирования (различные макросистемы). Я предлагаю вам взглянуть на некоторые основные книги Scheme, а затем прочитать о двух разных макросистемах.
Некоторые хорошие Scheme книги:
реализации Scheme сильно отличаются друг от друга, так что вы будете также использовать схему ручного осуществления той или много тоже.
В некоторых местах, чтобы узнать о Scheme макросов:
Если вы решили использовать язык, что это больше и грязнее, чем схемы, попробуйте Common Lisp , Есть три книги, которые я бы предложил:
- Во-первых, «Practical Common Lisp» автор Peter seibel.Это поможет вам начать работу с Common Lisp и макросами;
- Во-вторых, «On Lisp» автор Paul Graham. Затем вы узнаете, что макросы более мощные, чем то, о чем вы думали раньше, и узнаете действительно хорошие методы;
- В-третьих, "Let Over Lambda" от Doug Hoyte. Передовая книга, лучше всего прочитанная после Грэма на Лиспе.
Для Пролога, вы можете прочитать «Программирование на Прологе» по Clocksin и Меллишом (получить последний выпуск!), А затем перейти к «Пролог в глубины программирования» от Ковингтон, Vellino и Nute. См. Главу 6.
Есть много хороших книг Smalltalk. Мне нравится «Искусство и наука Smalltalk» Симона Льюиса. О Smalltalk тоже очень хорошо free tutorial/primer by Canol Gokel (но это не так, как преподавание метапрограммирования).
Возможно, вы захотите сделать этот вопрос в вики-сообществе, чтобы избежать закрытия на субъективной и аргументативной основе , –
Теперь это сообщество wiki. – Erup
+1 Хороший вопрос. Настоящий позор был закрыт, потому что об этом можно многое сказать. Лисп (1960) - мать всех языков метапрограммирования. Схема - это простой в освоении Lisp. Семейство языков MetaLanguage (ML, 1970) было разработано специально для метапрограммирования, а современные производные (OCaml, Haskell, F #) имеют большую поддержку для этого. Проверьте языки, которые позволяют настроить таргетинг на виртуальные машины, такие как .NET, но также и LLVM. Регулярные выражения - убедительный практический пример полезности метапрограммирования. –