Wie häufig ist Metaprogrammierung? [geschlossen]

10

Wie oft haben Sie oder haben Sie gesehen, dass Metaprogrammierung in Projekten verwendet wird? In der Uni habe ich noch nie gesehen, dass dies angewendet wird, aber ich habe dies bei meinem vorherigen Job gesehen (als ich es sah, war ich überwältigt davon, wie effektiv es war).

Aber wie häufig ist es? Wird es ständig oder nur gelegentlich verwendet?

gablin
quelle
5
Es könnte nicht so häufig sein; Obwohl in Lisp durchaus üblich, ist Lisp nicht so häufig - nicht einmal Common Lisp.
Paul
explizit oder implizit? In einem Extremfall ist die Verwendung von Java und C # wohl eine Metaprogrammierung, da ihre Compiler Sprachdateien ausgeben, die dann kompiliert oder interpretiert werden. Andererseits schreibt so gut wie niemand Code, um Code in einer Sprache zu generieren, für die er einen Compiler erstellt hat.
Móż
Metaprogrammierung ist allgegenwärtig. Jedes OpenSource-Projekt, das auf Autotools basiert, verwendet Metaprogrammierung. MOC in der Qt-Welt, tblgen in LLVM, T4 in zahlreichen .NET-Projekten, so ziemlich jedes Webprojekt, das JavaScript generiert, und so weiter.
SK-Logik

Antworten:

5

Wenn Sie Reflexion als eine Art Metaprogrammierung betrachten, ist dies relativ häufig. Für manche Menschen ist sogar die generische Programmierung (Vorlagen und Generika) eine Form der Metaprogrammierung, daher ist dies noch häufiger.

Meiner Meinung nach ist die Metaprogrammierung jedoch etwas komplexer, das die eigentliche Codegenerierung beinhaltet und daher selbst in Skriptsprachen ziemlich ungewöhnlich ist.

Wizard79
quelle
Warum ist die Metaprogrammierung von Vorlagen keine "tatsächliche Codegenerierung"?!? C ++ - Vorlagen sind vollständig und Sie können beliebigen komplexen Code generieren.
SK-Logik
@ SK-Logik: Ich meine, neuer Code wird bei Bedarf zur Laufzeit generiert. Vorlagen werden vom Compiler verarbeitet. Sie können sie als leistungsstarke Art von Precompiler-Makro betrachten.
Wizard79
Warum sollten Sie zur Laufzeit Code generieren? Die leistungsstärksten Formen der Metaprogrammierung (wie Common Lisp, Racket, Template Haskell usw.) befinden sich in der Kompilierungszeit.
SK-Logik
3

Ich denke, es hängt stark davon ab, welche Sprache Sie verwenden. Gewöhnliche Lisp-Leute machen wahrscheinlich einen fairen Gebrauch davon - das Meta-Object-Protokoll ermöglicht zum Beispiel ordentliche Dinge transparente / orthogonale Persistenz - und Smalltalker verwenden es häufig.

Frank Shearar
quelle
2

Es tritt häufig und konsistent in Common Lisp-Projekten auf. Schauen Sie sich OnLisp und Let Over Lambda an, um Erklärungen / Einblicke zu erhalten.

Wenn Sie nur nach Beispielen suchen (und CL kennen), überprüfen Sie das Antiweb- Repository. Es gibt eine Menge Meta-Programmierung unter der Decke.

Inaimathi
quelle
1

In den letzten zwei Jahren war das erste Stück Programmierung für eine neue Aufgabe fast immer das Schreiben von Code zum Schreiben von Code. Es gibt eine Menge Boilerplate im Zusammenhang mit Interaktionen mit einer Datenbank, die bis zur automatischen Skriptgenerierung vereinfacht werden können. Denken Sie an Dinge, bei denen Sie 3 Tabellen abfragen müssen, um ein Objekt oder ähnliches zu bilden. Warum selbst schreiben, wenn es 10 dieser Dinge gibt, die sich in Zukunft ändern könnten?

Wheaties
quelle