- Yazar, öğrenme projesi olarak Rust ile yazılmış
rjvm adlı bir JVM geliştirdi.
- Bu JVM oyuncak bir uygulama; generics, thread'ler, reflection, annotation'lar, I/O veya JIT derlemeyi desteklemiyor.
- Bu JVM; kontrol akışı ifadeleri, primitive ve nesne oluşturma, sanal ve statik metod çağrıları, istisna işleme, çöp toplama ve
jar dosyalarından sınıf çözümlemeyi gerçekleştiriyor.
- Yazar, test paketini OpenJDK 7'nin gerçek
rt.jar dosyasını kullanarak hazırladı.
- Kod üç crate'ten oluşuyor:
reader, vm ve vm_cli.
reader crate'i .class dosyalarını ayrıştırabiliyor ve içeriklerini modelleyebiliyor.
vm crate'i, kodu çalıştırabilen sanal makineyi içeriyor.
vm_cli, VM için basit bir komut satırı başlatıcısıdır.
- Yazar, başkalarının da kullanabilmesi için
reader crate'ini ayrı bir depoya çıkarmayı değerlendiriyor.
.class dosyalarını yüklemek, Java kodunu çalıştırmanın ilk adımıdır.
- Sınıf dosyaları; sınıfa ilişkin metadata, üst sınıf ve arayüz adları, alanlar ve metodlar ile bunların descriptor'ları ve bytecode'larını içerir.
vm crate'inin ana API'si Vm::invoke olup metodları bununla çalıştırırsınız.
vm crate'i hem Java bytecode metodlarını hem de Rust ile uygulanmış native metodları destekler.
- JVM yığın tabanlıdır; bytecode komutları değer yığını ve yerel değişkenler üzerinde çalışır.
- Değerler ve nesneler, Rust'taki
enum ve struct kullanılarak modellenir.
- Metod yürütme; bytecode komutlarını tek tek çalıştırmayı, program sayacını güncellemeyi ve yığın ile yerel değişkenleri işlemeyi içerir.
- JVM, sanal ve statik çözümleme dahil çeşitli metod çağrısı türlerini destekler.
- İstisnalar, istisna tabloları kullanılarak uygulanır ve bir metodun normal kontrol akışını kesintiye uğratabilir.
- Yazar, Rust'ın
Result tipi ve pattern matching kullanarak yaptığı istisna uygulamasıyla gurur duyuyor.
- JVM, stop-the-world yarı alan kopyalama algoritmasını kullanan bir çöp toplayıcı içeriyor.
- Çöp toplayıcı belleği iki yarı alana böler ve canlı nesneleri bir yarı alandan diğerine kopyalar.
- Yazar, Rust ile
rjvm yazarken çok eğlendiğini ve çok şey öğrendiğini söylüyor.
1 yorum
Hacker News görüşleri
Objectolarak mı ele alındığı soruluyor.