web-dev-qa-db-fra.com

Existe-t-il un convertisseur / outil Java vers C ++?

Je me suis toujours demandé s'il serait possible de faire un convertisseur Java vers C++.

Peut-être un outil qui convertit la syntaxe Java en syntaxe C++?

Je suis conscient que les langages diffèrent, mais des choses simples comme des boucles où la sémantique correspond à 1 à 1.

Existe-t-il un tel outil? Ou est-il possible d'en faire un?

49
n00ki3

Il est possible de faire n'importe quoi avec suffisamment de temps, d'argent et de ressources. Est-ce pratique? Au-delà des exemples triviaux pas vraiment. Ou plutôt cela dépend de ce qui constitue un taux d'erreur acceptable.

Le vrai problème est que les idiomes sont différents en Java en C++. Java en C # par exemple serait en fait beaucoup plus facile (car les idiomes sont beaucoup plus similaires) Le plus grand bien sûr est que C++ a des destructeurs et une mémoire gérée manuellement. Java utilise enfin des blocs pour ce type de comportement et possède un garbage collection.

Aussi Java a un sur-type d'objet commun. C++ non.

Les génériques aux modèles seraient presque impossibles, j'imagine.

22
cletus

L'analyseur HTML5 de Firefox est écrit en Java et converti en C++ . Mais je pense que le convertisseur utilisé là-bas est assez spécifique pour ce projet. Fait intéressant, il s'est avéré que le résultat L'analyseur C++ était plus rapide que l'ancien analyseur écrit en C++.

J'écris également un convertisseur dans le cadre de la base de données H2 , sous src/tools/org/h2/Java. L'idée est de permettre la conversion d'un sous-ensemble de la base de données H2 en C++, donc ce n'est pas non plus un traducteur à usage général.

Et il y a le projet open source J2C .

Il existe donc des moyens de convertir Java en C++. Mais ne vous attendez pas à ce que le traducteur prenne en charge toutes les fonctionnalités et ne vous attendez pas à ce que le code résultant soit plus rapide qu'un bon Java JVM.

11
Thomas Mueller

C'est possible, sans aucun doute, mais ce ne sera pas si simple. Ce serait un compilateur Java qui génère C++.

Si vous voulez le faire à partir de zéro, ce sera très difficile, vous devez faire tout le travail que javac et la JVM font pour vous (par exemple, la collecte des ordures).

Btw. Google a un Java au compilateur JavaScript (inclus dans GWT )

7
Johannes Weiss

Il y en a un, mais je ne sais pas si cela fonctionne réellement. Java vers C++ - Soulutions logicielles tangibles .

Il est étrange de voir comment il existe des convertisseurs c ++ vers Java, mais seulement 1 Java to c ++ converter).

6
user963395

Comme dit, il serait difficile de convertir Java en C++ mais nous pouvons avoir une application ou un outil qui génère du code en Java et du code C++ équivalent).

Je connais une application qui génère du code en C++/Java/C # étant donné un modèle qui a sa propre façon de le définir.

Cet outil appartient à CA et son nom est CA Plex. Recherchez sur www.ca.com

3
Bestguy

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

Dépend du domaine où le code sera utilisé, d'un point de vue d'apprentissage, il pourrait être intéressant.

je viens de trouver cela via un google car je me souvenais en avoir vu un dans Univeristy qui créait du code basé sur uml.

2
Paul Whelan

Il existe des programmes qui prétendent qu'ils peuvent le faire, mais aucun n'a gagné suffisamment de popularité pour être fréquemment mentionné, nous allons donc les laisser à des "tentatives". Faire un convertisseur nécessiterait beaucoup d'intelligence artificielle intégrée à votre programme. La difficulté est décuplée lorsque le swing est impliqué, car l'API GTK/wxWidgets/Qt/win32 diffère beaucoup du swing. Mais c'est possible. Ce n'est pas que la qualité du code sera excellente, et aucune garantie que votre programme ne plantera pas en raison de méthodes de gestion de la mémoire distinctes, mais c'est possible.

2
John T

Quelque chose de bien serait un outil qui traduirait Java en "C++ en utilisant Java API" (comme GNU GCJ CNI) , un problème reste à gérer array.length (tableau et non vecteur) ...

2
RzR

Java vers C serait en fait le plus simple. N'oubliez pas que vous devez convertir la langue.Si vous le faites, les bibliothèques requises peuvent être converties par votre nouveau compilateur. En d'autres termes, Swing et AWT ne devraient pas être un gros problème ...

Je commencerais par jeter un coup d'œil à l'interface Java Native Interface (JNI). La JNI fait partie de Java qui lui permet d'être utilisée avec C et C++. La raison pour laquelle je commencerais ici est qu'il devient assez évident comment des parties de Java peuvent être implémentées en C. Une fois que j'ai eu une compréhension des structures de base, comme comment Java Les objets peuvent être mappés sur des structures C (struct) et à quel point tout dans Java est un objet comprenant des tableaux, je pourrais jeter un œil au code source Open JDK.

Le convertisseur réel devrait convertir toutes les Java Java (et leurs bibliothèques importées et ainsi de suite ...) importées, ce qui signifie que vous auriez besoin du code source pour tout. Cette conversion n'est pas une mince tâche depuis les bibliothèques Java sont grandes.

Le processus prendrait beaucoup de temps, mais aucune IA ne devrait être requise. Cependant, je ne vois aucune raison d'effectuer une conversion comme celle-ci. Il perd la portabilité de Java et ne gagnerait pas l'efficacité de C (sauf qu'il serait compilé en code natif, mais il serait préférable de compiler le code machine directement à partir de Java).

2
mitt10tim

Le principal problème est que Java est un langage écrit et conçu pour parler à une machine virtuelle. Je suppose que ce serait possible, mais il ne vous resterait qu'une application très mal optimisée avec un couche auto-traductrice faisant ce que le VM le fait déjà. Je veux dire, bien sûr, c'est possible, ce ne serait toujours pas une solution pour tout ce à quoi je pourrais penser. Si vous cherchez à rendre votre paresseux Java natif de l'application, peut-être que vous réfléchissez trop, utilisez simplement une application comme JET, son en fait assez bonne, et vous donnera les avantages qu'une application native apporterait. Bien sûr, si le VM fait déjà ce que l'application lui demande de faire aussi bien que le code natif pourrait le faire (cela arrive .. parfois: P) cela pourrait ne rien changer.

Java to c #, tho, semble plus raisonnable, car les deux langages sont écrits de manière similaire, parlant à un framework en tant que tel, mais cela laisserait encore beaucoup de code non optimisé car le code écrit à partir de zéro pour un framework particulier ne peut pas être amélioré.

2
Richard Smith