7 puan yazan GN⁺ 2024-11-19 | 1 yorum | WhatsApp'ta paylaş
  • Nova, veri odaklı tasarımıyla öne çıkan bir JavaScript motoru; performansı ve önbellek verimliliğini en üst düzeye çıkarmak için tasarlanmış bir yapı benimsiyor
    • Bellek güvenlik açıklarını önlemeyi ve performans optimizasyonunu aynı anda hedefliyor
  • Başlıca özellikler:
    • JavaScript heap'ine ayrılan tüm veriler, türe göre vektörlerde saklanıyor (sayılar sayı vektöründe, string'ler string vektöründe vb.).
    • Heap referansları, türe göre ayrılmış indeksler olarak işleniyor; bu da bellek güvenliği ve boyut verimliliği sağlıyor.
    • Nesneler, türe göre ayrılarak vektörlerde saklanıyor (genel nesneler, diziler, DataView vb.).
    • Genel olmayan nesneler, yalnızca gerektiğinde genel nesne verisine başvuracak şekilde tasarlanmış.
    • Nesneler, kullanılmayan verilerin okunmasını önlemek için agresif biçimde ayrıştırılarak depolanıyor.
  • Hâlâ geliştirme aşamasında. Motorun özellikleri şu anda oldukça sınırlı ve test262 test paketinin yalnızca yaklaşık %47'sini geçebiliyor

1 yorum

 
GN⁺ 2024-11-19
Hacker News görüşü
  • Mimari seçimlere dair tartışma ilginç, ancak çoğu insanın karşılaştırma yapabileceği bağlamı yok. V8’in mimarisiyle karşılaştırıldığında ne gibi avantajlar sunduğunu anlamak zor
  • Lisp yorumlayıcısı gibi projeler hakkında düşünmüştüm ve birkaç temel avantaj tespit etmiştim
    • Tek tip tahsis, hizalama boşlukları olmadığı anlamına gelir
    • Çöp toplamada doğrusal erişimin avantajları
    • Pointer’lardan daha küçük indeksler
    • Türe göre ayrılmış indeksler boyuttan tasarruf sağlayabilir
  • V8 ile karşılaştırmayı hemen yapmak gerekmiyor. V8 milyarlarca dolarlık bir proje
  • Fabrice Bellard’ın JS motoruna bakmak iyi olabilir
  • V8’in veri tahsis yaklaşımı
    • Tüm veriler, heap’in birden fazla bölümünden birine tahsis edilir
    • Heap referansları ya gerçek pointer’lardır ya da pointer compression kullanılıyorsa heap base’ten olan ofsetlerdir
    • V8 nesneleri ihtiyaç duyduğu tüm verileri içerir ve çoğu tek bir tahsiste saklanır
  • Veri odaklı tasarım, verilere nasıl erişildiğinin bilinmesiyle şekillenir. Yaygın veri erişiminin aynı türdeki nesnelere doğrusal erişim olduğunu neden varsaydıklarını merak ediyorum
  • "Sayılar sayı vektörüne gider" yaklaşımı yaygın değil. JS motorları genelde NaN-boxing veya inline küçük tamsayılar kullanır
  • NaN-boxing kullanmayı düşünüp düşünmediklerini merak ediyorum. Türe özel vektörlerin GC tarafından sıkıştırılıp sıkıştırılmadığını, yoksa bir free list mi tuttuklarını merak ediyorum
  • "Don’t Stop the BIBOP: Flexible and Efficient Storage Management for Dynamically Typed Languages" makalesini okumayı öneririm
  • Bu JS motorunun deneysel olup olmadığını, yoksa ECMAscript spesifikasyonunun tamamını uygulamayı mı hedeflediğini merak ediyorum
  • Rust’taki Boa projesini takip ediyorum, ancak henüz production-ready olduğunu düşünmüyorum
  • Veri odaklı yaklaşım ve türe özel vektörler, V8 gibi geleneksel mimarilerden oldukça farklı
    • Gerçek senaryolardaki performans: Karmaşık ve doğrusal olmayan veri erişim kalıpları içeren senaryolarda Nova’yı V8 veya SpiderMonkey ile karşılaştıran benchmark’lar var mı, merak ediyorum
    • Çöp toplamadaki ödünleşimler: Vektör büyümesi ve sıkıştırmanın bellek parçalanmasına veya performans darboğazlarına yol açıp açamayacağını merak ediyorum
  • Belirli bir uygulama profili düşünülüp düşünülmediğini merak ediyorum
    • Oyunlara scripting engine gömmek için faydalı olabilir
  • "kind-specific vectors" içindeki "kind" sözcüğünün ne anlama geldiğini merak ediyorum
    • function X(a) { this.a = a; } ve function Y(b) { this.b = b; } farklı nesne türleri olarak mı kabul ediliyor, merak ediyorum
    • Nesneler literal ile oluşturulduğunda {a: 1} ve {b: 2} farklı nesne türleri olarak mı kabul ediliyor, merak ediyorum