it-swarm.com.de

Gibt es einen Java nach C ++ Konverter / Tool?

Ich habe mich immer gefragt, ob es möglich wäre, einen Java in C++ - Konverter zu erstellen.

Vielleicht ein Tool, das die Java Syntax in die C++ Syntax konvertiert?

Mir ist bewusst, dass sich die Sprachen unterscheiden, aber einfache Dinge wie Schleifen, bei denen die Semantik 1 zu 1 übereinstimmt.

Gibt es so ein Tool? Oder ist es möglich, einen zu machen?

49
n00ki3

Mit genügend Zeit, Geld und Ressourcen ist alles möglich. Ist es praktisch Jenseits trivialer Beispiele eigentlich nicht. Oder vielmehr kommt es darauf an, was eine akzeptable Fehlerrate ausmacht.

Das eigentliche Problem ist, dass sich die Redewendungen in Java von C++ unterscheiden. Java nach C # wäre tatsächlich viel einfacher (weil die Redewendungen viel ähnlicher sind). Das größte ist natürlich, dass C++ über Destruktoren und manuell verwalteten Speicher verfügt. Java verwendet finally-Blöcke für diese Art von Verhalten und verfügt über eine Garbage Collection.

Auch Java hat einen gemeinsamen Objekt-Supertyp. C++ nicht.

Die Generika zu Vorlagen wären so gut wie unmöglich, würde ich mir vorstellen.

22
cletus

Der Firefox HTML5-Parser ist in Java und in C++ konvertiert geschrieben. Ich denke jedoch, dass der dort verwendete Konverter für dieses Projekt ziemlich spezifisch ist C++ - Parser war schneller als der in C++ geschriebene alte Parser.

Ich schreibe auch einen Konverter als Teil der H2-Datenbank unter src/tools/org/h2/Java. Die Idee ist, die Konvertierung einer Teilmenge der H2-Datenbank in C++ zu ermöglichen, sodass dies auch kein Allzweckübersetzer ist.

Und da ist das Open Source-Projekt J2C .

Es gibt also Möglichkeiten, Java nach C++ zu konvertieren. Erwarten Sie jedoch nicht, dass der Übersetzer alle Funktionen unterstützt, und erwarten Sie nicht, dass der resultierende Code schneller ist als ein guter Java JVM.

11
Thomas Mueller

Es ist möglich, keine Frage, aber es wird nicht so einfach sein. Es wäre ein Java Compiler, der C++ generiert.

Wenn Sie das von Grund auf neu machen wollen, wird es sehr schwierig, Sie müssen die ganze Arbeit erledigen, die Javac und die JVM für Sie erledigen (z. B. Garbage Collection).

Btw. Google hat einen Java to JavaScript-Compiler (enthalten in GWT )

7
Johannes Weiss

Es gibt ein bisschen, ich bin nicht sicher, ob es tatsächlich funktioniert. Java zu C++ Converter-Tangible Software Soulutions .

Es ist seltsam, wie es C++ zu Java Konverter, aber nur 1 Java zu C++ Konverter gibt.

6
user963395

Wie gesagt, es wäre schwierig, Java in C++ zu konvertieren, aber wir können eine Anwendung oder ein Tool haben, das Code in Java und äquivalenten C++ - Code generiert.

Ich kenne eine Anwendung, die Code in C++/Java/C # generiert, wenn ein Modell vorhanden ist, das seine eigene Art hat, ihn zu definieren.

Dieses Tool gehört zu CA und heißt CA Plex. Suchen Sie auf www.ca.com

3
Bestguy

http://www.tangiblesoftwaresolutions.com/Order/Order_Upgrade_Instant_CPlus_Java_Edition.htm

Abhängig von der Domäne, in der der Code verwendet wird, ist er aus Lernsicht möglicherweise interessant.

ich habe das gerade über Google gefunden, als ich mich daran erinnerte, dass ich eines in Univeristy gesehen habe, das Code basierend auf Uml erstellt hat.

2
Paul Whelan

Es gibt Programme, die behaupten, dass sie dies können, aber keine haben genug Popularität erlangt, um häufig erwähnt zu werden, also werden wir sie bei "Versuchen" belassen. Um einen Konverter zu erstellen, müsste viel KI in Ihr Programm integriert werden. Die Schwierigkeit wird verzehnfacht, wenn es um Swing geht, da sich die APIs GTK/wxWidgets/Qt/win32 erheblich von Swing unterscheiden. Aber es ist möglich. Nicht, dass die Codequalität großartig wäre und es keine Garantie dafür gibt, dass Ihr Programm aufgrund separater Speicherverfahren nicht abstürzt, aber es ist möglich.

2
John T

Etwas Ordentliches wäre ein Tool, das Java in "C++ mit Java API") übersetzt (wie GNU GCJ CNI) , bleibt ein Problem zu verwalten array.length (Array nicht Vektor) ...

2
RzR

Java nach C wäre eigentlich am einfachsten. Denken Sie daran, dass Sie die Sprache konvertieren müssen. Wenn Sie dies tun, können die erforderlichen Bibliotheken von Ihrem neuen Compiler konvertiert werden. Mit anderen Worten, Swing und AWT sollten kein großes Problem sein ...

Ich möchte zunächst einen guten Blick auf das Java Native Interface (JNI)) werfen. Das JNI ist ein Teil von Java, das die Verwendung mit C ermöglicht und C++. Der Grund, warum ich hier anfangen würde, ist, dass es ziemlich offensichtlich wird, wie Teile von Java in C implementiert werden können. Nachdem ich grundlegende Strukturen verstanden hatte, wie Java Objekte können auf C-Strukturen (struct) abgebildet werden und wie so ziemlich alles in Java ein Objekt einschließlich Arrays ist, kann ich im Open JDK-Quellcode nachlesen.

Der eigentliche Konverter müsste alle importierten Java Bibliotheken (und ihre importierten Bibliotheken usw.) konvertieren, was bedeutet, dass Sie den Quellcode für alles benötigen würden. Diese Konvertierung ist seitdem keine leichte Aufgabe Die Java Bibliotheken sind groß.

Der Vorgang wäre zeitaufwändig, es sollte jedoch keine KI erforderlich sein. Ich sehe jedoch keinen Grund, eine solche Konvertierung durchzuführen. Es verliert die Portierbarkeit von Java und würde nicht die Effizienz von C erreichen (außer dass es zu nativem Code kompiliert würde, aber es wäre besser, den Maschinencode direkt aus Java zu kompilieren).

2
mitt10tim

Das Hauptproblem ist, dass Java eine Sprache ist, die für die Kommunikation mit einer virtuellen Maschine geschrieben und entwickelt wurde. Ich nehme an, es wäre möglich, aber Sie würden nur eine sehr schlecht optimierte Anwendung mit einem Selbstübersetzende Ebene, die das tut, was die VM bereits tut. Ich meine, sicher, es ist möglich, es wäre immer noch keine Lösung für alles, woran ich denken könnte. Wenn Sie träge werden wollen Java App native, vielleicht denken Sie zu viel darüber nach, verwenden Sie einfach eine Anwendung wie JET, die eigentlich recht gut ist, und Sie erhalten die Vorteile, die eine native App bringen würde. Natürlich, wenn die VM tut bereits, was die App verlangt, genauso gut wie nativer Code (es passiert .. manchmal: P), es könnte nichts ändern.

Java zu c #, obwohl, klingt vernünftiger, da beide Sprachen auf ähnliche Weise geschrieben sind und mit einem Framework als solchem ​​sprechen, aber dies würde Code immer noch sehr unoptimiert lassen, da Code, der für ein bestimmtes Framework von Grund auf neu geschrieben wurde, nicht besiegt werden kann.

2
Richard Smith