Qual è il vantaggio di un programmatore VM oltre alla portabilità [duplicato]

3

Posso comprendere i vantaggi di Java in esecuzione su una JVM. Portabilità. Bel motivo semplice. Ma sono sempre stato sconcertato sul motivo per cui Microsoft ha pubblicato la propria versione di JVM - .NET. C # dovrebbe essere un linguaggio raffinato (non ho usato me stesso), ma Microsoft potrebbe aver lanciato un prodotto per l'uso nativo. cioè per generare un exe?

Il mio collega sta imparando F #. La ragione per cui deve essere un linguaggio che gira su .NET è perché l'API Microsoft Lync che verrà utilizzata è disponibile solo su .NET. cioè non c'è C API per Lync.

Una visione cinica potrebbe essere che il motivo è il blocco del fornitore. F # funzionerà solo su una piattaforma Microsoft (o C #) e quindi il programma è bloccato. Ma forse mi mancano altri vantaggi di una piattaforma VM?

    
posta user619818 31.10.2013 - 12:35
fonte

2 risposte

9

Uno degli aspetti più importanti della macchina virtuale .NET è la ragione per cui è chiamato il Common Language Runtime.

Tutti i linguaggi di programmazione di .NET vengono compilati con lo stesso formato bytecode che viene eseguito nella stessa macchina virtuale. Ciò consente ai programmi in cui parti diverse sono scritte in diversi linguaggi di programmazione per interagire senza problemi.

Le macchine virtuali hanno anche vantaggi in termini di prestazioni, poiché consentono la compilazione just-in-time e l'ottimizzazione just-in-time. Un comune compilatore offline può solo ottimizzare per una specifica architettura della CPU. Quando un'applicazione viene distribuita e l'utente non ha esattamente lo stesso sistema per cui è stata ottimizzata l'applicazione, avrà prestazioni leggermente peggiori di quelle possibili. Ma un compilatore JIT può controllare l'architettura quando il programma viene eseguito e sfruttare appieno le funzionalità disponibili. Inoltre, un comune ottimizzatore offline può solo fare ipotesi plausibili su quali parti di un programma vengono eseguite più spesso e quindi deve essere preferito durante l'ottimizzazione. Ma un ottimizzatore JIT può monitorare il programma mentre è in esecuzione, controllare quali rami sono utilizzati più spesso e ottimizzare il programma al volo mentre è in esecuzione.

Ma anche la Java VM può fare tutto questo. Perché allora Microsoft non ha come target la JVM? È per motivi di lavoro. Microsoft è noto per volere il maggior controllo possibile sull'intero stack su cui gira un'applicazione. Avere Sun (ora Oracle) controlla una parte importante dell'ecosistema di sviluppo del software era considerato un problema per loro. Soprattutto quando consente al software di funzionare su sistemi operativi non Microsoft! Così hanno sviluppato il loro framework .NET come competizione diretta con Java per attaccare la quota di mercato di Sun (ora Oracle).

    
risposta data 31.10.2013 - 13:37
fonte
0

CLR ha anche tipi di valore (cioè le strutture sullo stack) così si può sostenere che è una versione più efficiente di JVM. Anche l'implementazione di generici è migliore.

    
risposta data 31.10.2013 - 19:49
fonte

Leggi altre domande sui tag