Ich habe eine komplexe Math-Bibliothek für JavaScript geschrieben, die die Fähigkeit bietet, Funktionen aus Strings von menschenlesbaren mathematischen Ausdrücken zu generieren. Gibt es eine Möglichkeit, ein Äquivalent von Laufzeit-generierten Funktionen in C++ zu erreichen?Gibt es irgendwelche Möglichkeiten, C++ - Code während der Laufzeit zu kompilieren?
Antwort
FUZxxl 's Antwort ist richtig, und ich empfehle, die Clang/LLVM Einrichtung zu betrachten.
Es gibt eine grundlegende (nicht so hilfreich) Tutorial file here. Und ein breites Tutorial zum Schreiben Ihrer Language on LLVM. Sie können Ihre generierte Bibliothek in Ihre C++ App laden.
Es sei denn, Sie eine leistungskritische Komponente haben, können Sie die Verwendung von ChaiScriptbeschäftigen (NB: Ich bin in keiner Weise dem Unternehmen assoziiert ihm oder den Autoren)
Danke für die hilfreichen Links, ich werde meine Optionen abwägen. Und ja, die Komponente wird leistungskritisch sein. Der Grund, warum ich die Bibliothek portiere, ist, weil ich die Geschwindigkeit meines Fraktal-erzeugenden Programms erhöhen möchte. –
Sie können den C++ - Compiler ausführen, eine gemeinsam genutzte Bibliothek erstellen und diese in Ihr Programm laden, um C++ - Code zur Laufzeit auszuführen. Beachten Sie, dass die Details davon abhängen, auf welcher Plattform Sie arbeiten, da Windows und POSIX unterschiedliche Mechanismen zum Laden von gemeinsam genutzten Bibliotheken haben.
Die ‚kompilierte Sprache Art und Weise‘ zu definieren, Deine Grammatik, baue einen Parser, einen AST (abstract syntax tree) und interpretiere/kompiliere das. Wenn Sie das tun, schreiben Sie im Wesentlichen Ihren eigenen Compiler/Interpreter und es macht viel Spaß. Wenn Sie es leicht machen wollen, können Sie sich Boost Spirit anschauen.
Danke für die Empfehlung, aber leider sind die zu kompilierenden Strings erst zur Laufzeit bekannt, da ich sie von Benutzereingaben erwarte. Ich glaube nicht, dass ein Dolmetscher für meine Bedürfnisse hoch genug wäre. –
Bitte beschränken Sie dies auf C oder C++, ansonsten ist es ein wenig breit. – fuz
@FUZxxl Dort ist es behoben. –
Sie könnten zu einem Compiler aufrufen;). Ernsthaft, ich denke, die LLVM-Jungs haben irgendwann C++ - JIT-Arbeiten gemacht, Sie werden sich das vielleicht ansehen (ich erinnere mich aber vielleicht daran). –