Makros werden verwendet, um dem Programmierer eine Folge von Rechenanweisungen als einzelne Programmanweisung zur Verfügung zu stellen, wodurch die Programmieraufgabe weniger mühsam und weniger fehleranfällig wird. [
Ich weiß, dass sie in C / C ++ extrem unsicher implementiert sind. Können sie nicht sicherer umgesetzt werden? Sind die Nachteile von Makros wirklich schlimm genug, um die enorme Leistung, die sie bieten, aufzuwiegen?
Der C-Präprozessor ist an C angehängt, hat jedoch eine völlig andere Syntax als die Hauptsprache: syntaktisch signifikantes Leerzeichen (Zeilenende beendet eine Anweisung, Lücke nachdem das Makro den Anfang der Ersetzungsliste bestimmt) schlüsselwortbasierte Blöcke anstelle von geschweiften Blöcken elifanstelle vonelse if Schlüsselwort-geführte Definitionen anstelle von Deklaration-Reflects-Use, nein =für Wertedefinition Hinweise auf …
Aus verschiedenen Vergleichen zwischen C ++ - Vorlagen und C # / Java-Generika wie diesem https://stackoverflow.com/questions/31693/was-sind-die-unterschiede- zwischen-generika-in-c-und-java-und-vorlagen-in-c/31929#31929 Ich habe die Vorstellung, dass C ++ - Vorlagen durch eine Art Vorverarbeitung (Ersetzen von einfachem Text vor dem Parsen) implementiert und nicht kompiliert werden. Da die Typüberprüfung in C ++ - Vorlagen …
Mit Common Lisp können Sie Makros schreiben, die die gewünschte Quelltransformation ausführen. Das Schema gibt Ihnen ein hygienisches Musteranpassungssystem, mit dem Sie auch Transformationen durchführen können. Wie nützlich sind Makros in der Praxis? Paul Graham sagte in Beating the Averages : Der Quellcode des Viaweb-Editors bestand wahrscheinlich zu 20-25% aus …
Ich lerne Schema von der SICP und habe den Eindruck, dass ein großer Teil dessen, was Schema und vor allem LISP ausmacht, das Makrosystem ist. Aber, da Makros zur Kompilierungszeit erweitert werden, warum stellen die Leute keine äquivalenten Makrosysteme für C / Python / Java / whatever her? Zum Beispiel …
Ich lese gerade 'The Standard C Library' von PJ Plauger, was wirklich interessant ist. Das Buch erklärt nicht nur, wie die Bibliothek NUTZT wird, sondern auch, wie sie implementiert wird. Ich habe den ctype.hAbschnitt gelesen und in der Kopfzeile sind die Funktionen als Makros UND Funktionen deklariert. Beispielsweise int isdigit(int); …
Aus heutiger Sicht passt diese Frage nicht zu unserem Q & A-Format. Wir erwarten, dass die Antworten durch Fakten, Referenzen oder Fachwissen gestützt werden, aber diese Frage wird wahrscheinlich Debatten, Argumente, Abstimmungen oder erweiterte Diskussionen hervorrufen. Wenn Sie der Meinung sind, dass diese Frage verbessert und möglicherweise erneut geöffnet werden …
Ich versuche, etwas über LISP zu lernen, und ich habe viel über die Bedeutung von LISP-Makros gelesen, daher möchte ich gerne Erfahrungen mit ihnen sammeln. Können Sie einen praktischen Anwendungsbereich vorschlagen, in dem ich mithilfe von Makros ein reales Problem lösen und die Nützlichkeit dieses Programmierkonstrukts verstehen kann? HINWEIS Dies …
Bei der Suche nach Python-Dekorateuren gab jemand die Aussage ab, dass sie genauso mächtig sind wie Lisp-Makros (insbesondere Clojure). Wenn ich mir die Beispiele in PEP 318 anschaue, sehe ich so aus, als wären sie nur eine ausgefallene Möglichkeit, einfache alte Funktionen höherer Ordnung in Lisp zu verwenden: def attrs(**kwds): …
Angenommen, ich möchte mehrere Arten von Ausgabenachrichten in meinem Code haben. Eine davon ist die DEBUG, die nur gedruckt wird, wenn der Code im Debug-Modus kompiliert wird. Normalerweise müsste ich sowas schreiben #ifdef DEBUG std::cout << "Debug message" << std::endl; #endif Das ist ziemlich umständlich und an vielen Stellen ärgerlich …
Ich habe gehört, dass Clojure-Makros einfacher zu schreiben sind, aber nicht so zuverlässig wie die Hygienemakros von Racket. Meine Frage besteht aus 2 Teilen: Wie unterscheidet gensymsich von Hygienemakros? Was bieten Racket-Makros, was Clojure nicht bietet? (sei es Sicherheit, Zusammensetzbarkeit oder irgendetwas)
Ich habe über die Bibliotheken gelesen, die für Sprachen wie Java und C # geschrieben wurden, die das Weben von Bytecode verwenden, um beispielsweise Funktionsaufrufe abzufangen, Protokollcode einzufügen usw. Ich habe auch über Lisp / Clojure-Makros in einem gelesen versuchen Sie besser zu verstehen, wie man sie benutzt. Je mehr …
Der erste Missbrauch, der mir in C einfällt, ist: #define if while Gleichzeitig ist es bei richtiger Anwendung äußerst handlich und leistungsstark. Ähnliches passiert mit Common Lisp-Makros. Warum unterstützen nicht alle Programmiersprachen solche Makros und welche Alternativen gibt es? Werden sie als schädlich angesehen?
Ich bin neu in Clojure, ich bin neu in Makros und ich habe keinen vorherigen Hintergrund in Lisp. Ich fuhr fort, mein eigenes Switch-Case-ähnliches Formular zu erstellen, und endete mit folgendem: (defmacro switch-case [v cases default] (if (cases v) (cases v) default )) und dann versucht, eine Funktion zu machen …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.