Erstens - ich glaube nicht, dass ich Ihrer Behauptung zustimme, dass "Metaprogrammierung die Zukunft des Codierens ist". Es ist ein großartiges Werkzeug, aber nicht jeder mag es (zum Beispiel haben die Java-Entwickler absichtlich Makros aus der Sprache herausgelassen - nicht, dass ich Java mag, aber Leute tun haben Gründe, Metaprogrammieren zu widersprechen).
Wie auch immer ... Ich kann mir zwei verschiedene Arten der Metaprogrammierung vorstellen: auf der syntaktischen Ebene und zur Laufzeit.
Für Syntax-Metaprogrammierung, denke ich, Scheme ist eine gute Option (wenn Sie Einfachheit nicht erwähnt haben, würde ich Common Lisp vorschlagen). Zur Laufzeit Metaprogrammierung Ich denke, sowohl Prolog und Smalltalk sind sehr interessant. (Sie können Fakten direkt zu einer Prolog-Datenbank hinzufügen, ändern und entfernen, und Sie können Smalltalk-Objekte im laufenden Betrieb ändern). Sie können wahrscheinlich Laufzeit-Metaprogrammierung auch in Ruby durchführen, aber ich kenne Ruby nicht.
Also - es gibt mehrere verschiedene Metaprogrammierungsmethoden in Scheme (verschiedene Makrosysteme). Ich schlage vor, Sie werfen einen Blick auf ein grundlegendes Schema-Buch und lesen später über zwei verschiedene Makro-Systeme.
Einige gute Scheme Bücher:
Scheme-Implementierungen sind sehr verschieden voneinander, so dass Sie auch Ihre Scheme-Implementierung manuell ein verwenden werden viel auch.
Einige Orte über Scheme-Makros zu lernen:
Wenn Sie sich entscheiden, eine Sprache zu verwenden, die als Schema größer und unübersichtlicher, versuchen Common Lisp . Es gibt drei Bücher, die ich vorschlagen würde:
- Zuerst "Practical Common Lisp" von Peter Seibel.Das wird dich auf Common Lisp und Makros bringen;
- Zweitens, "On Lisp" von Paul Graham. Sie werden dann lernen, dass Makros mächtiger sind als das, was Sie vorher dachten, und werden wirklich nette Techniken lernen;
- Drittens, "Let Over Lambda" von Doug Hoyte. Ein fortgeschrittenes Buch, am besten gelesen nach Graham's On Lisp.
Für Prolog, können Sie "Programming in Prolog" von Clocksin und Mellish (Holen Sie sich die aktuelle Ausgabe!) Und später den Weg zu "Prolog Programing in Tiefe" von Covington, Vellino und Nute lesen. Siehe Kapitel 6.
Es gibt viele gute Smalltalk-Bücher. Ich mag "Die Kunst und Wissenschaft von Smalltalk" von Simon Lewis. Es gibt eine sehr nette free tutorial/primer by Canol Gokel über Smalltalk auch (aber es geht nicht so weit wie Metaprogrammieren lehren).
Sie könnten dies zu einer Community-Wiki-Frage machen, um Schluss auf der subjektiven und argumentativen Basis zu vermeiden . –
Es ist jetzt Community-Wiki. – Erup
+1 Gute Frage. Wirkliche Schande, dass dies geschlossen war, weil es zu diesem Thema viel zu sagen gibt. Lisp (1960) ist die Mutter aller Metaprogrammierungssprachen. Schema ist ein einfach zu lernendes Lisp. Die Sprachfamilie MetaLanguage (ML, 1970) wurde speziell für die Metaprogrammierung entwickelt, und moderne Derivate (OCaml, Haskell, F #) haben eine große Unterstützung dafür. Testen Sie Sprachen, mit denen Sie VMs wie .NET, aber auch LLVM erreichen können. Reguläre Ausdrücke sind ein überzeugendes praktisches Beispiel für die Nützlichkeit der Metaprogrammierung. –