Differenza tra linguaggio macchina virtuale ed emulazione vm?

6

Ho difficoltà a capire la differenza tra una macchina virtuale di emulazione e un linguaggio vm. Ho iniziato con la ricerca e l'implementazione di una macchina virtuale di emulazione. Principalmente emulando architetture a 16 bit piuttosto vecchie.

Voglio ottenere le basi per una macchina virtuale di linguaggio. Entrambi i sistemi sono simili? Entrambi utilizzano architetture basate su registri e stack-based?

Ho l'impressione che un linguaggio VM sia fondamentalmente un ambiente di runtime. A seconda della complessità della VM, potrebbe avere un garbage collector, un compilatore JIT, ecc ... Questa supposizione dovrebbe essere corretta?

EDIT: Sto parlando anche di VM bytecode, ma funziona anche il codice macchina nativo.

    
posta Daniel 01.01.2013 - 10:25
fonte

1 risposta

5

La linea può essere molto sfocata, ma la distinzione risiede nello scopo previsto piuttosto che nella loro implementazione.

Le macchine virtuali di lingua funzionano tipicamente ad un livello più alto di astrazione. Possono eseguire bytecode o eseguire direttamente l'AST. La compilazione JIT può verificarsi in entrambi i casi, ma non conosco alcun processore che implementa GC (tranne forse macchine Lisp?).

La tua ipotesi è corretta, una lingua VM implementa l'ambiente runtime in un'implementazione linguistica.

    
risposta data 01.01.2013 - 11:00
fonte

Leggi altre domande sui tag