Domanda

Dotnet CLR converte il codice della lingua a MSIL. Mentre il codice Java essere convertito in codice nativo che è indipendente dalla piattaforma. Possiamo convertire questo MSIL in codice nativo? Così il Dotnet diventerà automaticamente indipendente dalla piattaforma.

È stato utile?

Soluzione

Fate attenzione a vostra terminologia qui:

  • Il CLR non converte "codice della lingua" per MSIL -. Converte MSIL in codice nativo al volo
  • codice Java non viene convertito in "codice nativo che è indipendente dalla piattaforma"; questo è un ossimoro. Codice sorgente Java viene convertito in indipendente dalla piattaforma Java bytecode. La JVM converte bytecode in codice nativo nello stesso modo come il CLR fa con MSIL (o meglio, in una certa misura)

Si noti che sia MSIL e bytecode possono essere interpretati; HotSpot a volte interpretare, a volte JIT di compilazione, e spesso in fase di compilazione JIT più volte . Il CLR .NET del desktop sempre JIT compila una sola volta al momento.

E 'anche la pena di comprensione che bytecode è soltanto indipendente dalla piattaforma nella misura in cui v'è una JVM disponibile per la piattaforma che ti interessa. Lo stesso vale per MSIL. È possibile compilare un programma C # su Windows e quindi eseguirlo su Linux sotto Mono se c'è una build di Mono per la piattaforma e se non utilizza le librerie che aren 't disponibili su Mono.

Ora, come per la conversione MSIL per il bytecode Java ... il contrario è più fattibile, come MSIL è in generale più potente di bytecode Java. Ad esempio, i tipi di valore personalizzati e generici in MSIL non si sia facilmente in bytecode. si sarebbe probabilmente bisogno di qualcosa più vicino ad un CLR scritto in Java . Oserei dire che ci sono alcune possibilità intelligenti, ma ci sono delle difficoltà fondamentali lì. Anche il contrario è improbabile che sia facile -. Specialmente se Java 7 introduce invocazione dinamica in bytecode (mentre la tipizzazione dinamica in .NET viene eseguita dal DLR proprio come una libreria)

Altri suggerimenti

Questa risposta può essere un po 'offtopic, ma degni di nota. MSIL in codice Java byte può dura come indicato da altri rispondere alla domanda. Ma è possibile gestire la conversione da un quadro all'altro a livello di codice sorgente.

Se si dispone di una libreria Java che si desidera utilizzare in un'applicazione .NET - uso IKVM . Si compila il codice Java in assembly .NET utilizzando IKVMC, un bytecode Java per .NET IL traduttore. Fare controllare i termini di licenza prima di saltare nel usando questo!

Anche io sono curioso di sapere se il contrario è possibile cioè NET codice sorgente di Java?

posso rispondere alla tua domanda solo parzialmente.

Sì, MSIL può essere convertito in codice nativo utilizzando Ngen.exe . In tal caso, però, si perde la possibilità di eseguire in modo efficiente su diverse architetture di riferimento, ad esempio, 32 bit vs 64 bit. Inoltre, si avrebbe bisogno di creare più versioni, una per ogni piattaforma di destinazione.

A parte che io suggerisco di usare la risposta di Kurt.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top