Pregunta

Dotnet CLR convierte el código de idioma a MSIL. Mientras Código de Java se convierte a código nativo que es independiente de la plataforma. Podemos convertir esta MSIL a código nativo? Por lo que el Dotnet se convertirá automáticamente en una plataforma independiente.

¿Fue útil?

Solución

Tenga cuidado con su terminología aquí:

  • El CLR no convierte "código de idioma" para MSIL -. Se convierte MSIL a código nativo sobre la marcha
  • código Java no se convierte en "código nativo que es independiente de la plataforma"; eso es una contradicción. código fuente de Java se convierte en independiente de la plataforma Java de código de bytes. La JVM convierte el bytecode a código nativo en la misma forma que el CLR hace con MSIL (bueno, hasta cierto punto)

Tenga en cuenta que tanto MSIL y el bytecode pueden interpretarse; HotSpot a veces interpretar, a veces de compilación JIT, y con frecuencia de compilación JIT varias veces . El CLR .NET escritorio siempre JIT compila una sola vez en el momento.

También vale la pena entendimiento de que el código de bytes sólo es independiente de la plataforma en la medida en que hay una JVM disponibles para la plataforma que le interesa. Lo mismo es cierto para MSIL. Puede compilar un programa en C # en Windows y luego ejecutarlo en Linux bajo Mono si que hay una acumulación de Mono para su plataforma y si que no utiliza ningún bibliotecas que aren 't disponible en Mono.

Ahora, como para convertir MSIL a código de bytes de Java ... lo contrario es más factible, como MSIL es general más potente que el código de bytes de Java. Por ejemplo, los tipos de valor personalizados y genéricos en MSIL no se traduce fácilmente en código de bytes. Probablemente usted necesita algo más cercano a un CLR escrito en Java . Me atrevo a decir que hay algunas posibilidades inteligentes, pero hay dificultades fundamentales allí. Incluso lo contrario es poco probable que sea fácil -. Especialmente si Java 7 introduce la invocación dinámica de código de bytes (mientras que tipado dinámico en .NET se lleva a cabo por el DLR simplemente como una biblioteca)

Otros consejos

Esta respuesta puede ser un poco offtopic, pero vale la pena mencionar. MSIL a código de bytes de Java puede dura como se detalla por otros responder a la pregunta. Pero se puede manejar la conversión de un marco a otro a nivel de código fuente.

Si usted tiene una biblioteca de Java que le gustaría utilizar en una aplicación .NET - uso IKVM . Se compila el código Java en ensamblados .NET utilizando IKVMC, un código de bytes de Java para .NET IL traductor. Hacer ver los términos de licencia antes de saltar en el uso de este!

También tengo curiosidad por saber si el contrario es posible decir .NET código fuente de Java?

puedo responder a su pregunta sólo parcialmente.

Sí, se puede convertir MSIL a código nativo utilizando ngen.exe . En ese caso, sin embargo, se pierde la capacidad para funcionar de manera eficiente en diferentes arquitecturas diana, por ejemplo 32 bits vs 64 bits. Además, lo que se necesita para crear varias versiones, una para cada plataforma de destino.

Aparte de eso se sugiere emplear la respuesta de Kurt.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top