web-dev-qa-db-ja.com

Java to C ++コンバーター/ツールが存在しますか?

Java to C++コンバーターを作成できるかどうかを常に自問しました。

Java構文をC++構文に変換するツールですか?

言語が異なることは承知していますが、セマンティクスが1対1に一致するループのような単純なものです。

そのようなツールはありますか?またはそれを作ることは可能ですか?

49
n00ki3

十分な時間、お金、リソースがあれば、何でもできます。実用的ですか?些細な例を超えて、実際にはそうではありません。むしろ、許容エラー率を構成するものに依存します。

本当の問題は、イディオムがJavaとC++で異なることです。たとえば、C#へのJavaの方がはるかに簡単です(イディオムがはるかに似ているため)。もちろん、C++にはデストラクタと手動で管理されるメモリがあります。 Javaは、このような動作にfinallyブロックを使用し、ガベージコレクションを備えています。

また、Javaには共通のオブジェクトスーパータイプがあります。 C++ではできません。

テンプレートへのジェネリックは、私が想像することは不可能に近いでしょう。

22
cletus

Firefox HTML5パーサーはJavaで記述され、C++に変換されます 。しかし、そこで使用されているコンバーターは、このプロジェクトに非常に特化したものだと思います。興味深いことに、結果のC++パーサーは、C++で記述された古いパーサーよりも高速であることがわかりました。

また、src/tools/org/h2/Javaの下に H2データベース の一部としてコンバーターを作成しています。この考え方は、H2データベースのサブセットをC++に変換できるようにすることであるため、これも汎用トランスレーターではありません。

そして、オープンソースプロジェクト J2C があります。

したがって、JavaをC++に変換する方法があります。ただし、トランスレーターがすべての機能をサポートすることを期待しないでください。また、結果のコードが優れたJava JVMよりも高速であることを期待しないでください。

11
Thomas Mueller

可能ですが、質問はありませんが、それほど簡単ではありません。 C++を生成するJavaコンパイラーになります。

それを最初からやりたい場合、それは非常に難しくなります.javacとJVMが行うすべての作業を行う必要があります(ガベージコレクションなど)。

ところでGoogleにはJavaScriptコンパイラへのJavaがあります( [〜#〜] gwt [〜#〜] に含まれています)

7
Johannes Weiss

1つありますが、実際に機能するかどうかはわかりません。 Java to C++ Converter-Tangible Software Soulutions

C++ to Java converters、but only 1 Java to c ++ converter。

6
user963395

前述のとおり、JavaをC++に変換するのは困難ですが、Javaおよびequivalnet C++コードを生成するアプリケーションまたはツールを使用できます。

私はそれを定義する独自の方法を持っているモデルを与えられたC++/Java/C#でコードを生成する1つのアプリケーションを知っています。

そのツールはCAに属し、名前はCA Plexです。 www.ca.comで検索

3
Bestguy

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

コードが使用される場所のドメインに依存しますが、学習の観点からはおそらく興味深いかもしれません。

uMLに基づいてコードを作成したUniveristyの1つを見たことを思い出したので、Googleでこれを見つけました。

2
Paul Whelan

これを行うことができると主張するプログラムがありますが、頻繁に言及されるほど十分な人気を得ていないため、「試行」のままにしておきます。コンバーターを作成するには、プログラムに多くのAIを組み込む必要があります。 GTK/wxWidgets/Qt/win32 APIはすべてswingとは大きく異なるため、swingが関係する場合は難易度が10倍になります。しかし、それは可能です。コードの品質が優れているわけではなく、別のメモリ処理メソッドが原因でプログラムがクラッシュしないという保証はありませんが、可能です。

2
John T

Javaを「Java APIを使用したC++」に変換するツール(GNU GCJ CNIなど)は、array.length(配列ではなくベクトル)...

2
RzR

JavaからCが実際に最も簡単です。言語を変換する必要があることを忘れないでください。その場合、必要なライブラリを新しいコンパイラで変換できます。言い換えれば、SwingとAWTは大きな問題ではないはずです...

私はJava Native Interface(JNI)をよく見ることから始めます。JNIは、Cで使用できるようにするJavaの一部です。ここで始める理由は、Javaの一部がCでどのように実装されるかがかなり明らかになるからです。一度、JavaオブジェクトはC構造体(構造体)にマップでき、Javaは配列を含むオブジェクトです。OpenJDKのソースコードを覗くことができます。

実際のコンバータは、インポートされたすべてのJavaライブラリ(およびインポートされたライブラリなど)...)を変換する必要があるため、すべてのソースコードが必要になります。 Javaライブラリは大きい。

このプロセスには時間がかかりますが、AIは必要ありません。ただし、このような変換を実行する理由はありません。 Javaの移植性を失い、Cの効率は得られません(ただし、ネイティブコードにコンパイルされることを除きますが、Javaから直接マシンコードをコンパイルすることをお勧めします)。

2
mitt10tim

主な問題は、JavaがVMと通信するように作成および設計された言語であることです。可能になると思いますが、残されるのは、VMが既に行っていることを行う自己翻訳層を備えた、非常に不十分に最適化されたアプリケーションだけです。確かに、それは可能ですが、それは私が考えることができるものの解決策ではないということです。緩慢なJavaアプリをネイティブにしたい場合、JETなどのアプリケーションを使用するだけで、実際には非常に優れているため、ネイティブアプリがもたらすメリットが得られます。もちろん、VMがネイティブコードとまったく同じようにアプリが要求することを既に実行している場合(発生する場合があります。:P)、何も変わらない可能性があります。

Javaからc#、tho、どちらの言語も同様の方法で記述され、フレームワークと通信しているため、より合理的に聞こえますが、特定のフレームワーク用にゼロから記述されたコードは最適化できないため、コードは依然として最適化されません。

2
Richard Smith