Wie sinnvoll ist es, eine C ++ - Anwendung mithilfe von LLVM (ich denke LLJVM) auf Java-Bytecode zu portieren?
Die Sache ist, dass wir derzeit einen Prozess in C ++ geschrieben haben, aber ein neuer Client hat vorgeschrieben, dass das Programm plattformübergreifend ausgeführt werden kann, wobei die Java Virtual Machine ohne nativen Code (ohne JNI) verwendet wird. Die Idee ist, in der Lage zu sein, das generierte JAR zu nehmen und es dann auf verschiedene Systeme (Linux, Win, 32 Bit - 64 Bit) zu kopieren, und es sollte einfach funktionieren.
Wenn Sie sich umschauen, ist es möglich, C ++ in LLVM-IR-Code und dann diesen Code in Java-Bytecode zu kompilieren. Der generierte Code muss nicht lesbar sein.
Ich habe ein bisschen mit ähnlichen Dingen mit emscripten getestet, dies nimmt C ++ - Code und kompiliert ihn zu JavaScript. Das Ergebnis ist gültiges JS, aber völlig unlesbar (sieht aus wie Assambler).
- Hat jemand mit dieser Technik einen Port einer Anwendung von C ++ auf Java-Bytecode erstellt?
- Vor welchen Problemen könnten wir stehen?
- Ist ein gültiger Ansatz für Produktionscode?
Um meinen Standpunkt nach einigen Kommentaren klarer zu machen: Vielleicht wird der Port nicht gut genutzt. Ich erwarte daher keinen lesbaren Quellcode, sondern nur Java-Bytecode. Es handelt sich also nicht mehr um einen 'Port', für den der Port entwickelt wird Zielplattform muss die Java-JVM sein, nicht der native Assamblear.
Hinweis: Mir ist bekannt, dass wir derzeit einige nicht standardmäßige C ++ - und Close Source-Bibliotheken haben. Wir möchten diesen nicht standardmäßigen Code und alle Close Source-Bibliotheken entfernen und die Open Source-Software Free Libre verwenden. Nehmen wir also an, der gesamte Code ist Standard-C ++ - Code mit Der gesamte Code ist zur Kompilierungszeit verfügbar.
Hinweis 2: Es ist keine Option, portablen C ++ - Code zu schreiben und ihn dann auf die gewünschte Zielplattform zu kompilieren. Das kompilierte Programm muss plattformübergreifend sein, daher die Verwendung von JVM.
Anmerkung 3: Im Moment untersuchen wir keine ähnlichen Lösungen für Python oder andere Sprachgrundlagen, aber ich würde auch gerne davon hören. Damit meine ich, dass unsere ausführbare Zieldatei Java-Bytecode sein muss, aber wenn es Optionen zum Kompilieren von C ++ zu gültigem Python-kompiliertem Code gibt, würde ich auch gerne davon hören.