Questo interprete sarebbe considerato una macchina virtuale? [chiuso]

0

(ho riformulato la mia domanda per renderla più specifica)

Considera un linguaggio di programmazione, che i suoi programmi possono essere eseguiti solo all'interno di un programma specifico che funge da interprete.

L'interprete analizza ogni riga del codice sorgente e la esegue così com'è.

L'interprete sarebbe considerato una macchina virtuale?

Concettualmente, una VM è un programma che altri programmi usano come piattaforma da eseguire all'interno. Quindi questo interprete si adatta alla definizione. Ma questo interprete interpreta solo il codice sorgente in testo semplice in esecuzioni (e non in bytecode).

    
posta NPElover 08.03.2014 - 23:23
fonte

3 risposte

3

Dipende. "eseguire" non è realmente la parte che definisce una macchina virtuale.

Per qualificarsi come macchina virtuale, un interprete dovrebbe offrire:

  • un modello di memoria (modi in cui un programma può acquisire, utilizzare e rilasciare memoria - c'è la garbage collection?)
  • API per IO (modi per i programmi di accedere a file, reti, ecc.)
  • opzionalmente, un modello di concorrenza (modi per i programmi da eseguire in parallelo e coordinate)

E tutti questi dovrebbero essere ben definiti e indipendenti dal sistema operativo e dall'hardware sottostante . Un interprete che fa tutto questo avrebbe una buona pretesa di essere un VM.

    
risposta data 09.03.2014 - 00:54
fonte
1

Penso che tu stia confondendo una sandbox con macchina virtuale . Una sandbox è un contenitore sicuro per una singola applicazione, in cui una macchina virtuale è un contenitore sicuro per molte applicazioni. Le macchine virtuali spesso non limitano ciò che tali app possono essere, ma una sandbox può essere per un tipo specifico di app.

La differenza tra una sandbox e un interprete è; Un interprete può essere interrotto senza uccidere l'applicazione, dove come sandbox può essere interrotto solo uccidendo l'applicazione.

    
risposta data 09.03.2014 - 01:22
fonte
0

Qualsiasi interprete potrebbe essere considerato una macchina virtuale. Dipende interamente dalla definizione della macchina virtuale che adotti.

Conceptually, a VM is a program that other programs use as a platform to run inside of. Thus this interpreter suits the definition.

Sì ...

But this interpreter only interprets plain-text source code into executions (and not bytecode).

Ben la tua definizione di macchina virtuale non dice nulla sulla natura della "piattaforma". Quindi questi problemi non sono rilevanti.

C'è anche il problema che non hai definito "programma". A seconda di come lo definisci, il tuo esempio potrebbe non essere un esempio di VM perché l'interprete non è un programma diverso nella macchina virtuale. (D'altra parte, potrebbe essere solo un difetto nella tua definizione di "macchina virtuale".)

Vorrei sottolineare che c'è una differenza tra il tuo interprete e (diciamo) un'istanza Java + JVM. Nel tuo caso, la macchina virtuale non è esposta. È interamente dentro l'interprete. Quindi, quello che è e come funziona è solo l'interesse accademico .

E, francamente, lo è anche l'intero argomento.

    
risposta data 09.03.2014 - 02:32
fonte

Leggi altre domande sui tag