5 puan yazan GN⁺ 2025-11-17 | 2 yorum | WhatsApp'ta paylaş
  • Rust ile sıfırdan uygulanmış bir JavaScript motoru olup ECMAScript spesifikasyonunu neredeyse eksiksiz destekleyecek şekilde tasarlanmıştır
  • Şu anda ECMAScript dilinin %97'sinden fazlasını geçiyor ve test262 tabanlı testlerle doğrulanmış durumda
  • V8'in Ignition tasarımından ve SerenityOS'in LibJS'inden ilham alarak, bileşenlerin çoğunu bağımlılıkları en aza indiren bir yaklaşımla doğrudan uyguluyor
  • Bayt kodu VM, sıkıştırılmış çöp toplayıcı, özel bir RegExp motoru ve parser dahil olmak üzere, spesifikasyona uygun yerleşik nesneler ve işlevler sunuyor
  • Henüz production kullanımı için tamamlanmış değil, ancak ES2025 düzeyinde özelliklere sahip Rust tabanlı bir JS motoru geliştirilmesinde önemli bir ilerleme

Brimstone genel bakış

  • Brimstone, Rust ile tamamen yeniden yazılmış bir JavaScript motorudur ve ECMAScript spesifikasyonunu sadık biçimde uygulamayı hedefler
  • Şu anda ECMAScript dilinin %97'sinden fazlasını destekliyor ve test262 testlerini geçiyor
  • Henüz production ortamında kullanıma hazır olmayan, geliştirilmesi süren bir projedir

Tasarım ve uygulama

  • ECMAScript spesifikasyonunu doğrudan uygular ve tasarım açısından V8 ile SerenityOS'in LibJS'inden ilham alır
  • Motorun bileşenlerinin çoğu bağımlılık olmadan doğrudan uygulanmıştır; yalnızca ICU4X istisna olarak kullanılır
  • Başlıca bileşenler:
    • V8 Ignition referans alınarak oluşturulmuş bayt kodu tabanlı VM
    • Oldukça unsafe Rust koduyla yazılmış sıkıştırılmış bir çöp toplayıcı
    • Özel bir RegExp motoru ve parser
    • Spesifikasyona uygun yerleşik nesne ve işlev uygulamaları

Derleme ve çalıştırma

  • Standart Cargo komutları ile derlenip çalıştırılabilir
    • cargo build ile bs çalıştırılabilir dosyası oluşturulur
    • cargo run ile doğrudan kaynak koddan çalıştırılır
  • JavaScript dosyası çalıştırma örneği:
    cargo build
    ./target/debug/bs ./hello.js
    Hello world!
    

Test yapısı

  • Resmî test262 dahil olmak üzere 1. ve 3. taraf entegrasyon test setleri kullanılır
  • Özel bir entegrasyon testi çalıştırıcısı içerir (cargo brimstone-test komutuyla çalıştırılır)
  • Birim ve snapshot testleri cargo test ile yürütülür
  • Ek test bilgileri tests/README.md içinde bulunabilir

Henüz uygulanmamış özellikler

  • ES2024'e kadar tüm özellikler ile Şubat 2025 TC39 toplantısı itibarıyla Stage 4 önerilerinin büyük bölümü uygulanmıştır
  • Henüz desteklenmeyen özellikler:
    • SharedArrayBuffer
    • Atomics

2 yorum

 
shakespeares 2025-11-19

Müthiş ya..

 
GN⁺ 2025-11-17
Hacker News yorumu
  • Yazarı benim. Bu projenin burada paylaşılmış olmasını görmek gerçekten sevindirici
    @ivankra'nın bunu javascript-zoo'ya ekleyip benchmark çalıştırması için minnettarım
    Son 3 yıldır olgunluk ve performansı artırmak için sürekli zaman ayırdığım bir hobi projesiydi
  • Basit bir karşılaştırma yapmak gerekirse, release build'de Boa yaklaşık 23MB, Brimstone ise yaklaşık 6.3MB
    Boa seviyesinde özellikleri tamamlayıp production için sertleştirirsem boyutu büyüyebilir, ama bu kadar küçük bir boyutla spesifikasyonun %97'sini geçmesi oldukça etkileyici
    • Boa, içinde Unicode tablolarını barındırıyor
      Brimstone'da bu yok, bu yüzden boyut farkının büyük kısmı bundan kaynaklanıyor
      Unicode işleme düzgün yapılacaksa birkaç MB veri gerekiyor, bu yüzden bugünlerde küçük executable üretmek kolay değil
      Unicode desteği zorunluysa asgari bir boyut sınırı oluşuyor
    • Boyut optimizasyonu ayrıca uygulanıp uygulanmadığını merak ediyorum
      Varsayılan ayarlar genelde performans odaklıdır, bu yüzden codegen-units=1 ya da panic kaldırma gibi seçenekler değiştirilirse sonuç farklı olabilir
    • Son birkaç yüzdeyi tamamlama sürecinde boyut orantısız şekilde büyüyebilir
      Boa yalnızca yaklaşık %91'i geçiyor, yani Brimstone daha olgun
      Küçük ölçekli projelerde kod küçük, temiz ve bakımı daha kolay olma eğilimindedir
      İş birliğinin her zaman belli bir ek yükü vardır
  • Boa ile karşılaştırma yapılıp yapılamayacağını merak ediyorum
    Boa deposu
    • Buradaki benchmark sonuçlarına bakılırsa, tek kişilik bir proje için şaşırtıcı derecede olgun görünüyor
      Özellikler Boa ile neredeyse aynı, bazı benchmark'larda ise iki kat daha hızlı
  • Rust ile yazılmış projelerin neden hep "Rust ile yazıldı" vurgusu yaptığını merak ediyorum
    • Eskiden de "Lisp ile yazıldı", "Ruby ile yazıldı", "JavaScript ile yazıldı" dönemleri vardı
      Bence bu gayet doğal bir akış
    • Rust, (unsafe yoksa) belirli hata sınıflarını en baştan engellemesi açısından anlamlı
      Gerçi bu projede epey fazla unsafe kullanıldığı söyleniyor
    • Rust ekosistemine yatırım yapan kişiler için yeni projeleri keşfetme sinyali olduğu için
    • Rust iyi bir dil, ama JS/TS'den gelen genç geliştiriciler arasında ona aşırı bağlanma eğilimi var
      Bir tür Blub etkisi gibi
    • Rust'ta bellek tahsisi ve tiplerle daha açık şekilde uğraşmak gerekiyor; geliştirmesi daha zor, ama bu yüzden yüksek kaliteli yazılımlar da çok çıkıyor
      Sonuçta bir pazarlama unsuru, ama ortalama kalite düzeyinin yüksek olduğu da doğru
  • "Compacting garbage collector, written in very unsafe Rust" ifadesi çok komiğime gitti
    • Konudan bağımsız ama eski cracktro intro'ları özledim
      OS açılmadan önce bir Ikari introsu çıktığını hayal ediyorum
  • Mevcut JS motorlarıyla kıyaslandığında nasıl olduğunu merak ediyorum
    • javascript-zoo benchmark'ları kabaca bir karşılaştırma sağlıyor
    • Bu motor doğrudan Rust programlarına embed edilebiliyor
      C/C++ linklemesi olmadan tamamen Rust native
      40MB'lık tek binary bir sunucuya JS scripting ekleyebilirsiniz
      Rust tabanlı birden fazla JS motorunun ortaya çıkması gerçekten harika
  • Rust'ın en büyük avantajlarından biri bellek güvenliği, ama neden özellikle unsafe bir GC kullanıldığı soru işareti
    • Rust'ta yüksek performanslı bir GC yok, bu yüzden unsafe ile yeni bir bellek yönetim sistemi kurmak mantıklı
      unsafe alanı minimumda tutulursa sorun olmayacağını düşünüyorum
    • Aslında Vec gibi standart kütüphane türleri bile içeride unsafe kullanıyor
      Önemli olan unsafe kullanımını küçük ve doğrulanabilir alanlarla sınırlamak
      GC implementasyonu da bu istisnai alanlardan biri
    • Rust'taki unsafe bile C++'taki kadar geniş bir undefined behavior alanı yaratmıyor
      Ben de bir JS runtime'ını Rust ile yazacak olsam önce güvenli şekilde yazar, ancak gerektiğinde unsafe kullanırdım
    • unsafe, derleyicinin anlayamadığı kısımları geliştiricinin doğrudan kontrol etmesi için var olan bir araç
      Yüksek performanslı GC implementasyonu için kaçınılmaz olarak gerekli olan yerler var
    • Kişisel olarak Rust'ın bellek güvenliği vurgusunun abartıldığını düşünüyorum
      Rust sadece hızlı ve iyi bir imperative dil
  • Lisans görünmüyor
    • Bu bir hataydı. Artık MIT lisansı ile yayımlandı
    • Temel olarak büyük şirketlerin sömürüye açık kullanımına izin vermeyen bir yaklaşımı olumlu buluyorum
  • "Rust bir garbage-collected dil değildir" noktasını yanlış anlayan yorumlar vardı
    • Rust GC dili değildir; yalnızca Rc ya da Arc kullanıldığında referans sayımı devreye girer