Gibt es C++ Compiler die aus C++ Code Java Bytecode erzeugen können?



  • So dass die Binarys plattformunabhängig werden?



  • Das macht keinen Sinn. Also - nein.



  • Mechanics schrieb:

    Das macht keinen Sinn.

    Doch. Wenn C++ ein ordentliches GUI Toolkit hätte würde ich C++ in so ziemlich jeder Hinsicht vorziehen, sogar wenn es letztlich nicht schneller wäre.

    Speicheroptimierungen kann man dann aber wohl vergessen. 😉



  • Mechanics schrieb:

    Das macht keinen Sinn. Also - nein.

    plattformunabhängige Binarys und nicht nur plattformunabhäniger Code sind IMO durchaus sinnvoll.

    Dadurch kann man nur für eine Plattform entwickeln und wenn der Kunde irgendwann mal Lust hat auf eine andere Plattform zu wechseln, läuft seine alte Software trotzdem noch darauf. Er braucht nur eine JVM dafür.



  • C++CodeThatRunsEverywhere schrieb:

    So dass die Binarys plattformunabhängig werden?

    Anscheinend gibst kein Bedarf für solche Projekte:
    http://nestedvm.ibex.org/



  • "Macht keinen Sinn" bezog sich weder auf plattformunabhängige Binaries, noch darauf, ob man Java oder C++ vorzieht. C++ ist einfach vom Prinzip her nicht Java und so ein Compiler würde keinen Sinn machen. Er würde wieder 1000 Einschränkungen auferlegen, man müsste sowieso sehr vieles beachten, damit es überhaupt irgendwie funktioniert... Nee, ich seh gar keinen Sinn in so einem Projekt. Wenn du plattformunabhägige Programme willst, musst du halt selber schauen, dass du entsprechend in C++ programmierst, möglich ist es ja.





  • bait schrieb:

    LLVM kann das. http://llvm.org/docs/GettingStarted.html

    Inwiefern?



  • C++CodeThatRunsEverywhere schrieb:

    Dadurch kann man nur für eine Plattform entwickeln und wenn der Kunde irgendwann mal Lust hat auf eine andere Plattform zu wechseln, läuft seine alte Software trotzdem noch darauf. Er braucht nur eine JVM dafür.

    Im anderen Fall benötigt er nur einen Compiler und die Build-Abhängigkeiten. Wenn er sich irgendwelche Binarys andrehen lassen hat, ohne den Source dazu zu haben, hat er aber in der Tat Pech gehabt.

    Zu LLVM: in der Tat ermöglicht LLVM/Clang die Ausgabe von LLVM-IR als von der Zielmaschine unabhängige Zwischenrepräsentation. Aus dieser lässt sich dann der entsprechende Maschinencode erzeugen. Dies theoretisch auch mit einem Just-in-Time-Compiler, auch wenn das normalerweise bei der Nutzung von Clang/LLVM als C- oder C++-Compiler eher nicht der Fall ist.



  • Horst Hannelore Hansen schrieb:

    Zu LLVM: in der Tat ermöglicht LLVM/Clang die Ausgabe von LLVM-IR als von der Zielmaschine unabhängige Zwischenrepräsentation. Aus dieser lässt sich dann der entsprechende Maschinencode erzeugen. Dies theoretisch auch mit einem Just-in-Time-Compiler, [...]

    Naja, ganz unabhängig ist das nicht. Bei Typen wie "int", "long", "double" und "float" in C und auch C++ gibt es ja noch genug Spielraum. Und was das "struct padding"/alignment angeht, gibt's meines Wissens nach auch Unterschiede. Spätestens bei der Übersetzung zum LLVM Byte Code (oder wie auch immer das heißt), müsste man sich doch bei solchen Dingen festlegen. Damit würde man sich Maschinen-technisch doch schon etwas einschränken, nicht? Aber prinzipiell, geht das natürlich. Man könnte einfach dem LP64-Modell folgen und float=32bit(IEEE-754) und double=64bit(IEEE-754) festlegen, so, wie es glaub'ich auch Java gemacht hat. Aber in Java gibt's auch kein sizeof und Zeigerfrickeleien. Da ist man einfach noch ein Stück weiter weg von der Maschine und kann die JVM so bauen, wie man es will, inklusive eines Objekt-Layouts, was einem am besten in den Kram passt ...

    Um auf die "C++ auf JVM" Thematik zurück zu kommen: Ich sehe nicht, wie das aufgrund der vielen Einschränkungen der JVM funktionieren soll, ohne das Verhalten des Programms stark anzupassen und auszubremsen.



  • Korrigiert mich, falls ich falsch liege, aber ich bin mir gerade ziemlich sicher, dass der JVM Bytecode keine Zeigerarithmetik vorsieht.


Anmelden zum Antworten