2009-08-03 10 views
164

In quali lingue è il compilatore Java (javac), la macchina virtuale (JVM) e lo starter java sono stati scritti?In quale lingua sono scritti il ​​compilatore Java e JVM?

+21

io lavoro su java, quindi voglio sapere della lingua ... :) –

+0

Sì, ma non sono coinvolto (né Rahul o lui non farebbe presumibilmente la domanda) nella scrittura di compilatori o interpreti Java . Scrivo codice Java ed è utile sapere come vengono eseguiti specifici bit (per selezionare le classi) ma se è scritto in C, BCPL o COBOL, non mi interessa. – paxdiablo

+24

La tua prospettiva. Diciamo che hai lavorato su alcune tecnologie per 20 anni e l'intervistatore ti ha chiesto in che lingua è scritto o come funziona, quindi puoi dire che non ti interessa vuol dire che vuoi solo scrivere se non nella lingua voglio veramente capire la lingua. –

risposta

140

L'esatta formulazione del quesito è leggermente fuorviante: non è "la JVM" o "il compilatore" in quanto vi sono diversi fornitori JVM (JRockit è uno, IBM un'altra) e più compilatori là fuori.

  • The Sun JVM è scritto in C, anche se questo non deve essere il caso - la JVM come corre sulla vostra macchina è una eseguibile dipendente dalla piattaforma e quindi potrebbe essere stato originariamente scritto in qualsiasi lingua Per esempio, l'originale IBM JVM è stato scritto in Smalltalk

  • Le librerie Java (java.lang, java.util ecc, spesso definito come Java API) sono essi stessi scritto in Java, anche se i metodi contrassegnati come native avrà stato scritto in C o C++.

  • Credo che il compilatore Java fornito da Sun sia scritto anche in Java. (Anche se ancora una volta, ci sono più compilatori là fuori)

+0

Penso che intenda "java" il programma che usi per avviare una JVM. –

+1

In realtà, * una * libreria in JRE di Sun è scritta in NetRexx. (È una delle librerie matematiche di precisione arbitraria, BigInteger, BigNum o BigDecimal. Ho dimenticato quale.) In teoria, è possibile utilizzare qualsiasi linguaggio per implementare JRE, purché possa compilare una rappresentazione che un programma Java può capire. –

+18

Si prega di fornire un riferimento a Sun JVM in fase di scrittura in C. –

7

In linea di principio qualsiasi cosa, di solito C

53

Da Java Docs

Il compilatore è scritto in Java e il runtime è scritto in ANSI C

+1

Il primo compilatore Java sviluppato da Sun Microsystems è stato scritto in C utilizzando alcune librerie da C++ http://en.wikipedia.org/wiki/Java_compiler –

+3

Questo è davvero piuttosto un vecchio documento (> 10 anni dall'aspetto delle cose). Ad esempio, si dice che "i bytecode Java sono tradotti al volo in istruzioni native della macchina (interpretate) e non memorizzate ovunque" * che non è stato vero per circa 5 anni! –

+2

Bene, da quando la documentazione è stata veramente aggiornata, soprattutto dopo grandi cambiamenti? :) – Esko

8

This link dovrebbe rispondere alla tua domanda

Sembra che il compilatore ora sia scritto in Java, ma il runtime è scritto in A NSI C

3

Jikes RVM, una JVM auto-hosting ampiamente utilizzata per scopi di ricerca è scritta in Java. Non è la sola gente a correre sui loro desktop, ma è molto più in alto nella mia lista di "ora dimostriamo il potere generale della lingua".

+0

Le tartarughe * sono verso il basso *? Ha una specie di microkernel? Se sì, in quale lingua è scritto? – Raedwald

2

Supponendo che stai parlando del Hotspot JVM, che è IIRC fornito da Sun, è scritto in C++. Per maggiori informazioni sulle varie macchine virtuali per Java, è possibile controllare questo link. javac, come la maggior parte dei compilatori Java, è scritto in Java.

-2

La maggior parte dei sistemi operativi, JVM sono scritti in ISO C++. Dubito che venga usato ANSI C, un linguaggio completamente diverso che al giorno d'oggi è piuttosto antiquato.

+20

Stai scherzando. La maggior parte delle versioni di Linux sono scritte in C. Un'enorme quantità di Windows è scritta in asso, come molti sistemi operativi integrati.La maggior parte degli scrittori di sistemi operativi rimarrà lontano da linguaggi come il C++, dove elementi come costruttori e distruttori che non sono presenti nel codice sorgente vengono automaticamente inseriti dal compilatore. –

+0

linux è scritto in "C". fino a quando jrockit jvm è stato scritto in "C". solo l'hotspot jvm è scritto in "C++". – techcraver

46

Il primo compilatore Java è stato sviluppato da Sun Microsystems ed è stato scritto in C usando alcune librerie da C++. Oggi, il compilatore Java è scritto in Java, mentre il JRE è scritto in C.

Possiamo immaginare come il compilatore Java è stato scritto in Java in questo modo:

Il compilatore Java è scritto come un programma Java e quindi compilato con il compilatore Java scritto in C (il primo compilatore Java). Quindi possiamo usare il compilatore Java appena compilato (scritto in Java) per compilare i programmi Java.

+19

+1 per spiegare come un compilatore Java può essere scritto in Java :) –