3 puan yazan GN⁺ 2023-07-22 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2023-07-22
Hacker News görüşleri
  • JVM’de Rust ile yazılmış bir çöp toplayıcının uygulanması, heap üzerindeki referansların uygun şekilde root edilmesinin nasıl garanti edildiği sorusunu gündeme getiriyor.
  • Yazıda, klonlanmış depoda testler çalıştırıldığında classpath’e öğe eklerken bir hata oluştuğundan bahsediliyor.
  • Bir yorumcu, geçmişte bir Java OS projesinde çalıştığı deneyimi hatırlatarak Rust ile JVM uygulamanın bellek güvenliği avantajlarını vurguluyor.
  • JVM’de generics desteğiyle ilgili bir soru var; type erasure nedeniyle her şeyin Object olarak mı ele alındığı soruluyor.
  • Bir yorumcu, fonksiyon imzalarında lifetime kullanımının sınırlamaları ve bunun hata işleme üzerindeki etkisi hakkında soru soruyor.
  • Proje, başarısı ve öğrenme deneyimi nedeniyle övülüyor.
  • Projenin kurucusuna iş teklifi yapılıyor.
  • Go ile yazılmış başka bir JVM uygulamasına bağlantı paylaşılıyor.
  • Bir yorumcu projeye hayranlığını dile getirip Rust başlangıç rehberi için yönlendirme istiyor.
  • Bu proje, ilginç temel mekanizmalara sahip bir JVM’in altyapı katmanı olarak tanımlanıyor.
  • Hobi amaçlı işletim sistemi projelerine mizahi bir gönderme bulunuyor.
  • Benzer projelere bağlantılar paylaşılıyor.