3 poin oleh GN⁺ 2023-07-22 | 1 komentar | Bagikan ke WhatsApp
  • Penulis membuat sebuah JVM bernama rjvm sebagai proyek pembelajaran yang ditulis dengan Rust.
  • JVM ini adalah implementasi mainan dan tidak mendukung generics, thread, reflection, annotation, I/O, atau kompilasi JIT.
  • JVM ini mengimplementasikan pernyataan alur kontrol, pembuatan tipe primitif dan objek, pemanggilan metode virtual dan statis, penanganan pengecualian, garbage collection, serta resolusi kelas dari file jar.
  • Penulis mengimplementasikan test suite menggunakan rt.jar asli dari OpenJDK 7.
  • Kodenya terdiri dari tiga crate: reader, vm, dan vm_cli.
  • Crate reader dapat mem-parsing file .class dan memodelkan isinya.
  • Crate vm berisi mesin virtual yang dapat mengeksekusi kode.
  • Crate vm_cli adalah peluncur command line sederhana untuk VM.
  • Penulis sedang mempertimbangkan untuk mengekstrak crate reader menjadi repositori terpisah agar dapat digunakan orang lain.
  • Memuat file .class adalah langkah pertama untuk menjalankan kode Java.
  • File kelas berisi metadata tentang kelas, nama superclass dan interface, field dan metode beserta descriptor dan bytecode-nya.
  • API utama dari crate vm adalah Vm::invoke, yang digunakan untuk menjalankan metode.
  • Crate vm mendukung baik metode bytecode Java maupun metode native yang diimplementasikan dalam Rust.
  • JVM berbasis stack, sehingga instruksi bytecode bekerja pada value stack dan variabel lokal.
  • Value dan objek dimodelkan menggunakan enum dan struct Rust.
  • Eksekusi metode melibatkan menjalankan instruksi bytecode satu per satu, memperbarui program counter, serta memanipulasi stack dan variabel lokal.
  • JVM mendukung berbagai jenis pemanggilan metode, termasuk lookup virtual dan statis.
  • Pengecualian diimplementasikan menggunakan exception table dan dapat mengganggu alur kontrol normal sebuah metode.
  • Penulis bangga dengan implementasi pengecualian menggunakan Result dan pattern matching di Rust.
  • JVM ini menyertakan garbage collector yang menggunakan algoritma penyalinan semi-space stop-the-world.
  • Garbage collector membagi memori menjadi dua semi-space, lalu menyalin objek yang masih hidup dari satu semi-space ke semi-space lainnya.
  • Penulis mendapatkan banyak kesenangan dan pembelajaran saat menulis rjvm dengan Rust.

1 komentar

 
GN⁺ 2023-07-22
Komentar Hacker News
  • Implementasi garbage collector yang ditulis dalam Rust di JVM menimbulkan pertanyaan tentang cara memastikan rooting referensi ke heap yang tepat.
  • Artikel tersebut menyebutkan bahwa menjalankan pengujian pada repositori yang dikloning menimbulkan kesalahan saat menambahkan entri ke classpath.
  • Seorang komentator mengenang pengalamannya dulu bekerja pada proyek Java OS dan menekankan manfaat keamanan memori dari mengimplementasikan JVM dengan Rust.
  • Ada pertanyaan tentang dukungan generics di JVM, dan apakah semuanya diperlakukan sebagai Object karena type erasure.
  • Seorang komentator bertanya tentang keterbatasan penggunaan lifetime dalam signature fungsi dan dampaknya terhadap penanganan error.
  • Proyek ini dipuji atas pencapaiannya dan pengalaman belajarnya.
  • Tawaran pekerjaan diberikan kepada pendiri proyek.
  • Tautan ke implementasi JVM lain yang ditulis dalam Go dibagikan.
  • Seorang komentator mengagumi proyek ini dan meminta panduan untuk mulai menggunakan Rust.
  • Proyek ini digambarkan sebagai lapisan fondasi JVM dengan mekanisme dasar yang menarik.
  • Ada penyebutan humoris tentang proyek sistem operasi hobi.
  • Tautan ke proyek serupa dibagikan.