Rufen Sie Python-Code aus LLVM JIT auf

Ich schreibe einen Sprachlexer / Parser / Compiler in Python, der in der LLVM JIT-VM laufen soll (mitllvm-py) später. Die ersten beiden Schritte sind vorerst recht einfach, aber (auch wenn ich die Kompilierungsaufgabe noch nicht gestartet habe) ich sehe ein Problem, wenn mein Code Python-Code (im Allgemeinen) aufrufen oder mit dem Python-Lexer interagieren möchte / Parser / Compiler (im speziellen). Mein Hauptanliegen ist, dass der Code zur Laufzeit in der Lage sein sollte, zusätzlichen Code dynamisch in die VM zu laden, und daher die gesamte Lexer / Parser / Compiler-Kette in Python innerhalb der VM auslösen muss.

Zuallererst: Ist das überhaupt möglich, oder ist die VM nach dem Start "unveränderlich"?

Wenn ja, sehe ich derzeit 3 ​​mögliche Lösungen (ich bin offen für andere Vorschläge)

"Brechen" Sie aus der VM aus und ermöglichen Sie den direkten Aufruf von Python-Funktionen des Hauptprozesses (möglicherweise durch Registrierung als LLVM-Funktion, die irgendwie zum Hauptprozess umleitet). Ich habe nichts darüber gefunden und bin mir auch nicht sicher, ob dies eine gute Idee ist (Sicherheit und so).Kompilieren Sie die Laufzeit (statisch oder dynamisch zur Laufzeit) in LLVM-Assembly / -IR. Dies setzt voraus, dass der IR-Code die VM ändern kann, in der er ausgeführt wirdKompilieren Sie die Laufzeit (statisch) in eine Bibliothek und laden Sie diese direkt in die VM. Auch hier muss es in der Lage sein, der VM, in der es ausgeführt wird, Funktionen (usw.) hinzuzufügen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage