Pergunta

O DOTNET CLR converte o código do idioma em MSIL. Enquanto o código JAVA pode ser convertido em código nativo que é independente da plataforma. Podemos converter este MSIL em código nativo? Portanto, o DOTNET se tornará automaticamente independente da plataforma.

Foi útil?

Solução

Tenha cuidado com sua terminologia aqui:

  • O CLR não converte "Código de Idioma" para MSIL - converte MSIL em código nativo em tempo real.
  • O código Java não é convertido em "código nativo que é independente da plataforma"; Isso é um oxímoro. O código -fonte Java é convertido em bytecode java independente da plataforma. A JVM converte bytecode em código nativo da mesma maneira que o CLR faz com o MSIL (bem, até certo ponto)

Observe que tanto o MSIL quanto o bytecode posso ser interpretado; O hotspot às vezes interpreta, às vezes compilam e frequentemente compilam várias vezes. O .Net Desktop CLR sempre compila uma única hora no momento.

Também vale a pena entender que o bytecode é apenas uma plataforma independente na medida em que existe uma JVM disponível para a plataforma em que você está interessado. O mesmo se aplica ao MSIL. Você pode compilar um programa C# no Windows e depois executá -lo no Linux em Mono E se Há uma construção de mono para sua plataforma e E se Ele não usa bibliotecas que não estão disponíveis no Mono.

Agora, quanto à conversão de MSIL em Java Bytecode ... o inverso é mais viável, pois MSIL é geralmente Mais poderoso que Java ByteCode. Por exemplo, tipos de valor personalizado e genéricos no MSIL não se traduziriam facilmente em bytecode. Você provavelmente precisaria de algo mais próximo de um clr Escrito em Java. Ouso dizer que existem algumas possibilidades inteligentes, mas há dificuldades fundamentais lá. É improvável que o reverso seja fácil - especialmente se o Java 7 introduzir a invocação dinâmica no bytecode (enquanto a digitação dinâmica no .NET é realizada pelo DLR como uma biblioteca).

Outras dicas

Essa resposta pode ser um pouco offtopic, mas vale a pena mencionar. O Código MSIL para Java Byte pode difícil, conforme detalhado por outras pessoas que respondem à pergunta. Mas você pode lidar com a conversão de uma estrutura para outra no nível do código -fonte.

Se você tem uma biblioteca Java que gostaria de usar em um aplicativo .NET - Use Ikvm. Ele compila o código Java em conjuntos .NET usando o IKVMC, um bytecode Java para o .NET IL Translator. Verifique os termos de licenciamento antes de pular para usar isso!

Também estou curioso para saber se o reverso é possível, ou seja, código -fonte .NET para Java?

Eu posso responder sua pergunta apenas parcialmente.

Sim, o MSIL pode ser convertido em código nativo usando ngen.exe. Nesse caso, no entanto, você perde a capacidade de executar com eficiência em diferentes arquiteturas de destino, por exemplo, 32 bits vs 64 bits. Além disso, você precisaria criar várias versões, uma para cada plataforma de destino.

Além disso, sugiro usar a resposta de Kurt.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top