質問

Dotnet CLR は言語コードを MSIL に変換します。Java コードはプラットフォームに依存しないネイティブ コードに変換されます。この MSIL をネイティブ コードに変換できますか?したがって、Dotnet は自動的にプラットフォームに依存しなくなります。

役に立ちましたか?

解決

ここでの用語には注意してください。

  • CLR は「言語コード」を MSIL に変換しません。MSIL をその場でネイティブ コードに変換します。
  • Java コードは「プラットフォームに依存しないネイティブ コード」には変換されません。それは矛盾しています。Java ソース コードは、プラットフォームに依存しない Java バイトコードに変換されます。JVM は、CLR が MSIL で行うのと同じ方法で (ある程度は) バイトコードをネイティブ コードに変換します。

MSIL とバイトコードの両方に注意してください。 できる 解釈される。HotSpot は、解釈する場合もあれば、JIT コンパイルする場合もあり、多くの場合は JIT コンパイルします。 複数回. 。現時点では、.NET デスクトップ CLR は常に 1 回の JIT コンパイルを行います。

また、バイトコードは、対象のプラットフォームで利用可能な JVM が存在する場合にのみプラットフォームに依存しないことも理解する価値があります。MSIL についても同様です。Windows 上で C# プログラムをコンパイルし、Linux 上の Mono で実行できます。 もし あなたのプラットフォーム用の Mono のビルドがあり、 もし Mono で利用できないライブラリは使用しません。

MSIL を Java バイトコードに変換する場合は...MSIL のように、その逆の方が実現可能です。 一般的に Java バイトコードよりも強力です。たとえば、MSIL のカスタム値の型とジェネリックは、バイトコードに簡単に変換できません。おそらく CLR に近いものが必要になるでしょう Javaで書かれた. 。あえて言えば、いくつかの賢い可能性もありますが、そこには根本的な困難があります。その逆ですら、簡単ではなさそうです。特に、Java 7 でバイトコードへの動的呼び出しが導入された場合 (一方、.NET での動的型付けは DLR によってライブラリとして実行されます)。

他のヒント

この応答はビットofftopicが、価値の言及かもしれません。 JavaバイトコードへのMSILは、質問に答える他の人が説明するようタフことがあります。しかし、あなたは、ソースコードレベルで別のフレームワークからの変換を処理することができます。

あなたは.NETアプリケーションで使用したいというJavaライブラリを使用している場合 - 使用 IKVMする 。それはIKVMC、.NET ILトランスレータにJavaバイトコードを使用して.NETアセンブリにJavaコードをコンパイルします。あなたがこれを使用するに飛び込む前に、ライセンス条件をご確認ください!

また、私は逆にJavaへ、すなわち.NETソースコードも可能であるかどうかを知るために好奇心が強いのですか?

私は部分的にしかあなたの質問に答えることができます。

はい、MSILはを使用してネイティブコードに変換することができますngen.exeする。その場合には、しかし、あなたは、例えば、異なるターゲットアーキテクチャ上で効率的に実行する能力を失います図32は、64ビット対ビット。また、あなたは、各ターゲットプラットフォームのための1つを複数のバージョンを作成する必要があります。

それとは別に、私はクルトの答えを使用することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top