Frage

Dotnet CLR wandelt den Sprachcode zu MSIL. Während Java-Code in der Native-Code umgewandelt werden, die plattformunabhängig ist. Können wir diese MSIL in Native-Code-Format konvertieren? So ist die Dotnet wird plattformunabhängig automatisch werden.

War es hilfreich?

Lösung

Seien Sie vorsichtig über Ihre Terminologie hier:

  • Die CLR nicht konvertiert "Sprachcode" MSIL -. Es MSIL wandelt in nativen Code on the fly
  • Java-Code ist nicht auf „native Code, plattformunabhängig“ umgewandelt; das ist ein Oxymoron. Java-Quellcode wird in plattformunabhängigen Java-Bytecode umgewandelt. Die JVM wandelt Bytecode in nativen Code in der gleichen Weise wie die CLR funktioniert mit MSIL (na ja, zu einem gewissen Grad)

Beachten Sie, dass beide MSIL und Bytecode können interpretiert werden; HotSpot wird manchmal interpretieren, manchmal JIT Kompilierung und oft JIT Kompilierung mehrere Male . Der .NET-Desktop-CLR immer JIT kompiliert ein einziges Mal im Moment.

Es lohnt sich auch verstehen, dass Bytecode nur plattformunabhängig in dem Maße, dass es eine JVM für die Plattform zur Verfügung, die Sie interessieren. Das gleiche gilt für MSIL wahr ist. Sie können ein C # Programm unter Windows kompilieren und dann auf Linux unter Mono laufen , wenn gibt es eine Version von Mono für Ihre Plattform und , wenn es keine Bibliotheken verwenden, die aren ‚t auf Mono.

Jetzt als für MSIL zu Java-Bytecode konvertieren ... das Gegenteil ist eher möglich, als MSIL ist im Allgemeinen mächtiger als Java-Bytecode. Zum Beispiel individueller Werttypen und Generika in MSIL nicht leicht in Bytecode übersetzen. Sie würden wahrscheinlich in Java etwas näher an einem CLR geschrieben müssen. Ich wage zu sagen, es gibt einige clevere Möglichkeiten, aber es gibt grundlegende Schwierigkeiten gibt. Auch ist das Gegenteil unwahrscheinlich einfach zu sein -. Vor allem, wenn Java 7 führt dynamischer Aufruf zu Bytecode (während dynamischer Typisierung in .NET durch das DLR durchgeführt wird, nur als Bibliothek)

Andere Tipps

Diese Antwort kann ein bisschen offtopic, aber erwähnenswert sein. MSIL zu Java-Bytecode hart kann wie von anderen ausführlich die Frage zu beantworten. Aber Sie können in einem Quellcode-Ebene auf eine andere Konvertierung von einem Rahmen behandeln.

Wenn Sie eine Java-Bibliothek haben, dass Sie in einer .NET-Anwendung verwenden möchten - Verwendung IKVM . Es kompiliert Java-Code in .NET-Assemblies mit IKVMC, ein Java-Bytecode zu .NET IL Übersetzer. Ziehen Sie die Lizenzbedingungen überprüfen, bevor Sie in die Verwendung dieser springen!

Auch ich bin neugierig, ob das Gegenteil möglich ist, das heißt .NET-Quellcode zu Java?

Ich kann Ihre Frage nur teilweise beantworten.

Ja, MSIL zu nativen Code umgewandelt werden, unter Verwendung von ngen.exe . In diesem Fall Sie jedoch verlieren die Fähigkeit, effizient auf unterschiedliche Zielarchitekturen auszuführen, z.B. 32 Bit vs 64 Bit. Außerdem müssten Sie mehrere Versionen, eine für jede Zielplattform.

erstellen

Abgesehen davon, dass ich schlage vor, Kurt Antwort verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top