Question

Dotnet CLR convertit le code de langue à MSIL. Alors que le code Java soit converti en code natif qui est indépendant de la plateforme. Peut-on convertir ce MSIL en code natif? Ainsi, la plate-forme sera Dotnet deviendra automatiquement indépendante.

Était-ce utile?

La solution

Faites attention à votre terminologie ici:

  • Le CLR ne convertit pas "code de langue" à MSIL -. Il convertit MSIL en code natif à la volée
  • code Java est pas converti en « code natif qui est indépendant de la plateforme »; c'est un oxymore. Le code source Java est convertie en plate-forme Java bytecode indépendante. La machine virtuelle Java convertit bytecode en code natif de la même manière que le CLR fait avec MSIL (bien, dans une certaine mesure)

Notez que les deux MSIL et bytecode peuvent être interprétées; HotSpot va parfois interpréter, parfois JIT compiler, et souvent JIT compilation plusieurs fois . Le CLR de bureau .NET toujours JIT compile une seule fois au moment.

Il est également intéressant de comprendre que le bytecode est seule plate-forme indépendante dans la mesure où il y a une machine virtuelle Java disponible pour la plate-forme qui vous intéresse. La même chose est vraie pour MSIL. Vous pouvez compiler un programme C # sur Windows, puis l'exécuter sur Linux sous Mono si il y a une version de Mono pour votre plate-forme et si il ne pas utiliser toutes les bibliothèques qui aren « t disponible sur Mono.

Maintenant que pour la conversion MSIL Java bytecode ... l'inverse est plus possible, comme MSIL est généralement plus puissant que bytecode Java. Par exemple, les types de valeurs personnalisées et génériques en MSIL ne se traduiront pas facilement en bytecode. Vous auriez probablement besoin de quelque chose plus proche d'un CLR écrit en Java . J'ose dire qu'il ya des possibilités intelligentes, mais il y a des difficultés fondamentales là. Même l'inverse est peu susceptible d'être facile -. Surtout si Java 7 introduit l'invocation dynamique bytecode (alors que le typage dynamique dans .NET est effectuée par le DLR comme une bibliothèque)

Autres conseils

Cette réponse peut être un peu hors-sujet, mais la peine de mentionner. MSIL à byte code Java peut difficile que détaillée par d'autres répondant à la question. Mais vous pouvez gérer la conversion d'un cadre à l'autre au niveau du code source.

Si vous avez une bibliothèque Java que vous souhaitez utiliser dans une application .NET - utiliser IKVM . Il compile le code Java dans des ensembles .NET à l'aide IKVMC, un bytecode Java à .NET Traducteur IL. Ne pas vérifier les conditions de licence avant de sauter dans d'utiliser ceci!

Aussi je suis curieux de savoir si l'inverse est possible à savoir le code source .NET Java?

Je ne peux répondre à votre question que partiellement.

Oui, MSIL peut être converti en code natif en utilisant ngen.exe . Dans ce cas, cependant, vous perdez la possibilité de fonctionner efficacement sur différentes architectures cibles, par exemple 32 bits vs 64 bits. , Vous devez également créer plusieurs versions, une pour chaque plate-forme cible.

En dehors de cela, je suggère d'utiliser la réponse de Kurt.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top