Dalam bahasa apa Java compiler dan JVM ditulis?

195

Dalam bahasa apa Java compiler ( javac), mesin virtual (JVM) dan javastarter ditulis?

Rahul Garg
sumber
23
i bekerja pada java jadi saya ingin tahu tentang bahasa ... :)
Rahul Garg
25
Perspektif Anda. Katakanlah Anda bekerja pada beberapa teknologi selama 20 tahun dan pewawancara menanyakan bahasa apa yang ditulisnya atau bagaimana kerjanya, maka Anda dapat mengatakan Anda tidak peduli artinya Anda hanya ingin menulis jika bahasa lain tidak ingin untuk benar-benar mengerti bahasa.
Rahul Garg
21
dan lebih dari itu saya pikir ilmu tidak pernah sia-sia. Jadi mengetahui sesuatu bukanlah buang-buang waktu.
Rahul Garg
1
... seorang insinyur mekanik atau pembalap (untuk meregangkan perumpamaan)
Epaga
2
@paxdiablo mengendarai mobil adalah sesuatu yang Anda lakukan, tetapi bukan profesi Anda. Pengemudi mobil balap mungkin peduli bagaimana mesin bekerja. Saya tidak mengatakan mereka semua peduli .. tetapi jika seorang pengemudi mobil balap ingin tahu lebih banyak tentang bagaimana mesin bekerja pada mobil dia dibayar untuk mengemudi, apakah Anda pikir itu tidak masuk akal?
JD Isaacks

Jawaban:

171

Ungkapan yang tepat dari pertanyaan ini sedikit menyesatkan: itu bukan "JVM" atau "kompiler" karena ada beberapa vendor JVM (jrockit adalah satu, IBM yang lain) dan beberapa kompiler di luar sana.

  • The Sun JVM yang ditulis dalam C, meskipun ini tidak perlu terjadi - JVM seperti berjalan pada mesin Anda adalah tergantung platform eksekusi dan karenanya bisa telah awalnya ditulis dalam bahasa apapun. Sebagai contoh, IBM JVM asli ditulis dalam Smalltalk

  • Pustaka Java ( java.lang, java.utildll, sering disebut sebagai Java API ) sendiri ditulis dalam Java, meskipun metode yang ditandai nativetelah ditulis dalam Catau C++.

  • Saya percaya bahwa kompiler Java yang disediakan oleh Sun juga ditulis dalam Java. (Meskipun sekali lagi, ada beberapa kompiler di luar sana)

oxbow_lakes
sumber
Saya pikir maksudnya "java" program yang Anda gunakan untuk memulai JVM.
Stephen C
1
Sebenarnya, satu perpustakaan di Sun's JRE ditulis dalam NetRexx. (Ini adalah salah satu pustaka matematika presisi acak, baik BigInteger, BigNum atau BigDecimal. Saya lupa yang mana.) Secara teori, Anda bisa menggunakan bahasa apa pun untuk mengimplementasikan JRE, asalkan dapat mengkompilasi ke representasi yang dapat dijalankan oleh program Java memahami.
Jörg W Mittag
18
Harap berikan referensi ke Sun JVM yang ditulis dalam C.
Mohamed Bana
8
HotSpot JVM ditulis dalam C ++ - www2.research.att.com/~bs/applications.html
devdimi
5
@devdimi tautannya rusak dan sekarang berada di: stroustrup.com/applications.html
flup
80

Kompiler Java pertama dikembangkan oleh Sun Microsystems dan ditulis dalam C menggunakan beberapa pustaka dari C ++. Hari ini, kompiler Java ditulis dalam Java, sedangkan JRE ditulis dalam C.

Kita dapat membayangkan bagaimana Java compiler ditulis dalam Java seperti ini:

Kompiler Java ditulis sebagai program Java dan kemudian dikompilasi dengan kompiler Java yang ditulis dalam C (kompiler Java pertama). Jadi kita dapat menggunakan kompiler Java yang baru dikompilasi (ditulis dalam Java) untuk mengkompilasi program Java.

Shrinath
sumber
31
+1 untuk menjelaskan bagaimana kompiler Java dapat ditulis dalam Java :)
Eduard Luca
2
dari proses "peningkatan" ke kompiler baru dengan mengkompilasi kode mereka di kompiler yang lebih mendasar disebut "bootstrap", seperti dalam "menarik diri Anda dengan bootstraps Anda", yang merupakan tempat "booting" mesin berasal. Computerphile di YouTube memiliki video yang bagus tentang ini dan "T diagram"
iono
Apakah itu juga menjawab masalah ayam dan telur :)
Skynet
@Skynet ayam swalayan
sportzpikachu
65

Dari Java Docs

Kompiler ditulis dalam Java dan runtime ditulis dalam ANSI C

Sev
sumber
1
Kompiler Java pertama yang dikembangkan oleh Sun Microsystems ditulis dalam C menggunakan beberapa perpustakaan dari C ++ en.wikipedia.org/wiki/Java_compiler
Rahul Garg
4
Ini benar-benar dokumen lama (> 10 tahun jika dilihat). Sebagai contoh, dikatakan "bytecode Java diterjemahkan dengan cepat ke instruksi mesin asli (ditafsirkan) dan tidak disimpan di mana saja" yang belum benar selama sekitar 5 tahun!
oxbow_lakes
2
Ya, sejak kapan dokumentasi benar-benar mutakhir, terutama setelah perubahan besar? :)
Esko
Yah - jawabannya tidak benar; Sun JVM ditulis dalam C, dan Sun Java compiler ditulis dalam Java. IBM JVM pertama ditulis dalam Smalltalk.
oxbow_lakes
8
Apa yang mengkompilasi Java? Jawa. Nah, bagaimana Anda mendapatkan Java? Kompilasi. Hah?
9

Tautan ini seharusnya menjawab pertanyaan Anda

Tampaknya kompiler sekarang ditulis dalam Java, tetapi runtime ditulis dalam ANSI C

micmoo
sumber
8

Pada prinsipnya hampir semua hal, biasanya C

djna
sumber
3

Jikes RVM , hosting mandiri JVM yang digunakan secara luas untuk keperluan penelitian ditulis di Jawa. Bukan orang yang berjalan di desktop mereka, tapi itu jauh di atas sana di daftar saya "sekarang mari kita memamerkan kekuatan umum bahasa."

Sam Harwell
sumber
Ini kura-kura sepanjang jalan ? Apakah ada semacam microkernel? Jika demikian, bahasa apa yang tertulis di dalamnya?
Raedwald
3

Misalkan Anda sedang berbicara tentang Hotspot JVM, yang iirc disediakan oleh Sun, ada tertulis dalam C ++. Untuk info lebih lanjut tentang berbagai mesin virtual untuk Java, Anda dapat memeriksa tautan ini . javac , seperti kebanyakan kompiler Java, ditulis dalam Java.

Michael Foukarakis
sumber
0
  • Ketika Java diperkenalkan oleh Sun Microsystem, kompiler java ditulis dalam C menggunakan beberapa pustaka dari C ++.
  • Karena Ada konsep dalam Desain Kompiler yang disebut Bootstapping, Sebagian besar digunakan dalam Pengembangan Kompiler, Bootstrapping adalah proses penulisan kompiler (Atau Assembler) Dalam bahasa pemrograman sumber yang dimaksudkan untuk dikompilasi. Ini digunakan untuk menghasilkan kompiler self-hosting. Pengembangan kompiler untuk bahasa pemrograman baru pertama kali dikembangkan dalam bahasa yang ada dan kemudian ditulis ulang dalam bahasa baru dan dikompilasi dengan sendirinya. Itu sebabnya hari ini, kompiler Java ditulis dalam Java itu sendiri .
  • Java Virtual Machine: Java virtual machine adalah mesin abstrak. Seperti mesin komputasi nyata, ia memiliki set instruksi dan memanipulasi berbagai area memori run time. Biasanya JVM menafsirkan kode byte ke dalam kode mesin.

(Untuk Informasi Lebih Lanjut Anda dapat memeriksa tautan ini: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Trishant Saxena
sumber