Domanda

Mi è stato per breve tempo leggendo su Maxine che è un'implementazione JVM open source che scritto in Java . Questo suona circolare per me. Se Java richiede una macchina virtuale per l'esecuzione in, come può la macchina virtuale in sé è scritto in Java (che non il codice VM richiede una macchina virtuale in cui eseguire, e così via?).

Modifica : Ok, quindi non vedo ho trascurato il fatto che Java non ha per l'esecuzione in una macchina virtuale. Come dunque si spiega come un compilatore LISP può essere scritto in LISP? O questo dovrebbe essere una nuova domanda del tutto?

È stato utile?

Soluzione

La tua ipotesi che Java richiede una macchina virtuale non è corretto per cominciare .

Altri suggerimenti

Si sta chiedendo circa l'uovo e la gallina.

Leggi: http://en.wikipedia.org/wiki/Bootstrapping_%28compilers% 29

La JVM che è necessario per l'avvio di una JVM scritto in Java, probabilmente non ha bisogno di un sacco di funzioni (come la raccolta dei rifiuti e JIT), potrebbe essere molto semplice. Tutte le funzioni più avanzate potrebbero quindi essere implementate in Java (che sembra essere esattamente il punto di Maxine, a sperimentare nuove idee nella tecnologia JVM).

Inoltre, Maxine non contiene codice C, che credo costituisce un ambiente di runtime minimo che viene utilizzato per ottenere il resto di Maxine andare. Ritengo che i bit interessanti (compilatore JIT, raccolta dei rifiuti) sono poi completamente implementate in Java.

codice Java può essere compilato direttamente in codice macchina in modo che una macchina virtuale non è necessaria.

Ho dato un'occhiata a Maxine la scorsa settimana e si chiedeva la stessa:)

Dal Maxine :

  

1 Costruire l'immagine di avvio

     

Ora costruiamo [immagine di avvio] a. Nel   questo passaggio, Maxine gira su una JVM ospite   per configurare un prototipo, quindi   compila il proprio codice e dati per   creare un programma eseguibile per la   piattaforma di destinazione.

     

2 Esecuzione Maxine

     

Ora che Maxine si è compilato,   siamo in grado di farlo funzionare come una macchina virtuale Java standard.   Il comando max vm gestisce i dettagli   di percorsi di classe e di biblioteca e   fornisce un'interfaccia simile a quella   standard di comando java lanciatore.

Si può avere uno sguardo al metodo ben consolidata di compilatori bootstrap. Penso che è iniziato negli anni '70 ...

E 'un po 'l'uomo whooaoaa, come può quel lavoro ???' - ma penso che si sta descrivendo il fenomeno noto come 'self-hosting':

Lingue (o toolchain / piattaforme) non iniziano come self-hosting - Partono vita essendo stato costruito su una piattaforma esistente: ad un certo punto diventano abbastanza funzionale per consentire ai programmi da scrivere, che capiscono la sintassi cui si succede ad essere scritto in.

V'è un grande esempio nel classico libro di AWK, che introduce un programma AWK che può analizzare (una versione ridotta come avviene) altri programmi AWK:. Vedi link sotto

C'è un altro esempio nel libro "Bella Code", che ha un programma JavaScript che può analizzare Javascript.

Credo che la cosa da ricordare su questo - se si dispone di (diciamo) una JVM scritto in Java che possono quindi eseguire Java byte code: la JVM che gestisce il Java JVM in sé deve essere ospitato in modo nativo (forse questo JVM è stato scritto in 'C' e poi compilato in codice macchina): questo è vero in ogni caso di un programma di auto-hosting finalmente - da qualche parte lungo la linea

.

Quindi, il mistero è stato rimosso -. Perché a un certo punto, c'è un programma della macchina-codice nativo in esecuzione di sotto tutto

E 'un pò di equivalente di essere in grado di descrivere la lingua inglese (ecc) utilizzando la lingua inglese in sé .... forse ...

http://www.amazon.co.uk/AWK-Programming-Language-Alfred-Aho/dp/020107981X/ref=sr_1_fkmr0_3?ie=UTF8&qid=1266397076&sr=8-3-fkmr0

http://www.amazon.co.uk/gp/search/ref=a9_sc_1?rh=i%3Astripbooks%2Ck%3Abeautiful+code&keywords=beautiful+code&ie=UTF8&qid=1266397435

http://en.wikipedia.org/wiki/Self-hosting

So che questo post è vecchio, ma ho pensato che avrei potuto aggiungere un po 'alla discussione in quanto sono punti che sono stati mancati. Così futuri lettori possono trovare questo utile.

Mi chiedo se tutti manca il punto qui. È possibile scrivere la maggior parte qualsiasi tipo di compilatore, interprete, o di una macchina virtuale in quasi tutte le lingue. Quando si utilizza C per scrivere un compilatore C è necessario un compilatore C per compilare il nuovo compilatore. Tuttavia, l'uscita è codice nativo che gira sulla piattaforma designata. Solo perché la JVM è scritto nella lingua che gira su JVM non significa l'uscita deve risultare in codice che viene eseguito sulla JVM. Per esempio si può scrivere C, Basic, Pascal compilatori o anche assemblatori in Java. In questo caso è necessario il JVM per creare il compilatore o assembler, ma una volta creato non è più necessario JVM se il codice iniziale provocato codice nativo. Un altro approccio è quello di scrivere un traduttore che prende una lingua di input e lo converte in un linguaggio macchina nativo in modo che si scrive il programma in linguaggio A, che compila in lingua B, che che viene poi compilato in codice macchina. Nel mondo microcontrollore si vede questo un sacco. Qualcuno vuole scrivere programmi in Basic o Java in modo che scrivono il compilatore Basic / Java per produrre codice C per un compilatore C esistente. Poi il codice C risultante viene compilato in linguaggio macchina che fornisce il nativo compilatore Basic / Java. Questo approccio è di solito più facile che scrivere il compilatore Basic / Java direttamente in codice macchina.

Molti anni fa ho scritto programmi Basica e GWBasic che hanno prodotto codice assembly per 6800 e micros Z80. Il mio punto è che l'uscita non deve essere dello stesso ilk come ingresso o di destinazione. OSSIA Solo perché si sta scrivendo una JVM in Java non significa che il risultato finale deve essere eseguito sotto una JVM Java.

Ecco una buona carta su bootstraping una VM self-hosted. Non è Java, ma javascript, ma i principi sono gli stessi.

Inizializzare un ricerca macchina virtuale self-hosted per JavaScript: un rapporto di esperienza

Si noti che mentre bootstraping un compilatore auto-host e bootstraping una VM self-hosted sono in qualche modo simile, credo che non sollevano le stesse sfide esatte.

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