- 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
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
Müthiş ya..
Hacker News yorumu
@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
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
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
Varsayılan ayarlar genelde performans odaklıdır, bu yüzden
codegen-units=1ya da panic kaldırma gibi seçenekler değiştirilirse sonuç farklı olabilirBoa 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 deposu
Özellikler Boa ile neredeyse aynı, bazı benchmark'larda ise iki kat daha hızlı
Bence bu gayet doğal bir akış
unsafeyoksa) belirli hata sınıflarını en baştan engellemesi açısından anlamlıGerçi bu projede epey fazla
unsafekullanıldığı söyleniyorBir tür Blub etkisi gibi
Sonuçta bir pazarlama unsuru, ama ortalama kalite düzeyinin yüksek olduğu da doğru
OS açılmadan önce bir Ikari introsu çıktığını hayal ediyorum
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
unsafebir GC kullanıldığı soru işaretiunsafeile yeni bir bellek yönetim sistemi kurmak mantıklıunsafealanı minimumda tutulursa sorun olmayacağını düşünüyorumVecgibi standart kütüphane türleri bile içerideunsafekullanıyorÖnemli olan
unsafekullanımını küçük ve doğrulanabilir alanlarla sınırlamakGC implementasyonu da bu istisnai alanlardan biri
unsafebile C++'taki kadar geniş bir undefined behavior alanı yaratmıyorBen de bir JS runtime'ını Rust ile yazacak olsam önce güvenli şekilde yazar, ancak gerektiğinde
unsafekullanırdımunsafe, 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
Rust sadece hızlı ve iyi bir imperative dil
Rcya daArckullanıldığında referans sayımı devreye girer