私は常に、Java から C++ へのコンバーターを作成できるかどうか自問自答していました。
たぶん、Java 構文を C++ 構文に変換するツールでしょうか?
言語が異なることは承知していますが、セマンティクスが 1 対 1 で一致するループのような単純なものです。
そのようなツールはありますか?それとも作ることは可能ですか?
私は常に、Java から C++ へのコンバーターを作成できるかどうか自問自答していました。
たぶん、Java 構文を C++ 構文に変換するツールでしょうか?
言語が異なることは承知していますが、セマンティクスが 1 対 1 で一致するループのような単純なものです。
そのようなツールはありますか?それとも作ることは可能ですか?
十分な時間、お金、リソースがあれば、何でもできます。実用的ですか?些細な例を超えて、実際にはそうではありません。むしろ、それは許容可能なエラー率を構成するものに依存します。
本当の問題は、イディオムがJavaとC++で異なることです。たとえば、JavaからC#への変換は実際にははるかに簡単です(イディオムがはるかに似ているため)。もちろん最大のものは、C++にデストラクタと手動で管理されるメモリがあることです。Javaはfinallyブロックをこの種の動作に使用し、ガベージコレクションを備えています。
また、Javaには共通のObjectスーパータイプがあります。C++はそうではありません。
テンプレートのジェネリックは、私が想像することはほぼ不可能です。
Firefox HTML5 パーサーは Java で書かれており、 C++ に変換されています。しかし、そこで使用されているコンバーターは、このプロジェクトに非常に特化していると思います。興味深いことに、結果として得られた C++ パーサーは、C++ で記述された古いパーサーよりも高速であることが判明しました。
また、src/tools/org/h2/java の下のH2 データベースの一部としてコンバーターを作成しています。アイデアは、H2 データベースのサブセットを C++ に変換できるようにすることであるため、これも汎用トランスレーターではありません。
また、オープン ソース プロジェクトJ2Cもあります。
したがって、Java を C++ に変換する方法があります。ただし、トランスレータがすべての機能をサポートするとは期待しないでください。また、結果のコードが優れた Java JVM よりも高速になるとは期待しないでください。
可能です、間違いありませんが、それはそれほど単純ではありません。これは、C++を生成するJavaコンパイラになります。
これを最初から実行したい場合は、非常に困難になります。javacとJVMが実行するすべての作業(ガベージコレクションなど)を実行する必要があります。
ところで。GoogleにはJavaからJavaScriptへのコンパイラ(GWTに含まれています)があります
それが実際に機能するかどうかはわかりません。 Java to C++ Converter-Tangible Software Soulutions .
c++ から Java へのコンバーターがあるのに、Java から C++ へのコンバーターは 1 つしかないのは奇妙です。
前述のように、Java を C++ に変換するのは難しいですが、Java と同等の C++ コードでコードを生成するアプリケーションまたはツールを使用できます。
独自の定義方法を持つモデルを指定して、C++/Java/C# でコードを生成するアプリケーションを 1 つ知っています。
そのツールは CA に属し、名前は CA Plex です。www.ca.com で検索
JavaからCへの変換が実際に最も簡単です。言語を変換する必要があることを忘れないでください。そうすれば、必要なライブラリを新しいコンパイラで変換できます。言い換えれば、SwingとAWTは大きな問題ではないはずです...
まず、Java Native Interface(JNI)をよく見ていきます。JNIはJavaの一部であり、CおよびC++で使用できます。ここから始める理由は、Javaの一部をCで実装する方法がかなり明らかになるためです。JavaオブジェクトをC構造体(構造体)にマップする方法や、 Javaは配列を含むオブジェクトです。OpenJDKのソースコードを覗いてみるかもしれません。
実際のコンバーターは、インポートされたすべてのJavaライブラリー(およびそれらのインポートされたライブラリーなど)を変換する必要があります。つまり、すべてのソースコードが必要になります。Javaライブラリが大きいため、この変換は簡単な作業ではありません。
このプロセスには時間がかかりますが、AIは必要ありません。ただし、このような変換を実行する理由はありません。Javaの移植性が失われ、Cの効率が向上しません(ただし、ネイティブコードにコンパイルされる場合を除きますが、マシンコードをJavaから直接コンパイルすることをお勧めします)。
http://www.tangiblesoftwaresolutions.com/Order/Order_Upgrade_Instant_CPlus_Java_Edition.htm
コードが使用されるドメインによって異なりますが、学習の観点からすると、おそらく興味深いかもしれません。
大学でumlに基づいてコードを作成したものを見たのを思い出したので、これをグーグルで見つけました。
これができると主張するプログラムはありますが、頻繁に言及されるほどの人気を得ているものはないので、「試み」のままにしておきます。コンバーターを作成するには、プログラムに多くのAIを組み込む必要があります。GTK / wxWidgets / Qt / win32 APIはすべてswingとは大きく異なるため、swingが含まれる場合は難易度が10倍になります。しかし、それは可能です。コードの品質が優れているわけではなく、メモリ処理方法が異なるためにプログラムがクラッシュしないという保証はありませんが、それは可能です。
Javaを「JavaAPIを使用してC++」(GNU GCJ CNIなど)に変換するツールがあれば、管理することが1つの問題になりますarray.length
(ベクトルではなく配列)...
主な問題は、Java が VM と対話するように作成および設計された言語であることです。それは可能だと思いますが、VM が既に行っていることを自己変換レイヤーで行う、最適化が非常に不十分なアプリケーションしか残されません。確かに、それは可能ですが、それでも私が考えることができる解決策にはなりません。遅い Java アプリをネイティブにしようとしている場合、考えが難しすぎるかもしれませんが、JET のようなアプリケーションを使用するだけで、実際には非常に優れており、ネイティブ アプリがもたらす利点が得られます。もちろん、VM がネイティブ コードと同じようにアプリが要求していることを既に実行している場合 (時々 :P)、何も変わらない可能性があります。
どちらの言語も同様の方法で記述され、フレームワーク自体と通信するため、Java から C# への変換はより合理的に聞こえますが、特定のフレームワーク用にゼロから記述されたコードを打ち負かすことはできないため、コードは依然として最適化されていないままになります。