· kaynak dev.to (home feed)
Wago, wazero'ya meydan okuyan yeni bir single-pass WebAssembly runtime olarak geldi
Bir geliştirici, Wago adlı yeni bir WebAssembly runtime'ı yayınladı; single-pass derleyicisi Railshot'ın, wazero'ya kıyasla 5,7 kat daha hızlı derlediği ve 11 kat daha az bellek kullandığı bildiriliyor.

Wago adlı yeni bir WebAssembly runtime'ı yayınlandı ve Wasmtime, Wasmer, wazero ve V8'ın zaten yer aldığı bir alana adım attı. dev.to'daki tanıtım yazısında yazar, projeyi belirli bir soruna cevap olarak konumlandırıyor: wasm'ı büyük ölçekte derlemenin ve çalıştırmanın maliyeti; bu alanda fiili durumda olan Go tabanlı seçenek ise fazla yavaş ve fazla bellek tüketen olarak hissediliyordu.
Neden bir runtime daha
Yazıya göre yazarın son iki işvereni Hypermode ve Impart Security, wazero üzerinde izole wasm iş yükleri çalıştırıyordu. Bunun çekiciliği açıktı: Docker container filarına veya mikro VM'lere gerek yok, guest programlar kilobayttan megabayta kadar RAM içinde rahatça yaşıyordu.
İddiasına göre bunun bedeli hız. Wasmtime, yüksek kaliteli makine kodu üreten gerçek bir optimizing compiler olan Cranelift'ten yararlanırken, wazero bilinçli olarak tepe performans yerine basitliği tercih ediyor. Daha büyük iş yüklerinde wazero'nun yalnızca bir modülü derlemek için yüzlerce megabayt bellek tükettiğini, bu maliyetin daha fazla makineyle ölçeklenerek ancak kısmen gizlenebildiğini söylüyor.
Bu, bilinçli olarak iddialı bir hedef kümesine yol açtı: yalnızca kilobaytlar düzeyinde belleğe ihtiyaç duyan, daha az makine kodu üreten, birkaç kat daha hızlı derleyen, wazero'dan anlamlı ölçüde hızlı çalışan, single-pass kalan ve zamanla embedded sistemleri hedefleyebilecek bir derleyici.
Railshot, single-pass bir derleyici
Sonuç, Wago'nun derleyicisi Railshot. Geleneksel boru hattını, yani büyük bir intermediate representation oluşturup tekrarlayan optimizasyon geçişleri çalıştırmayı atlıyor; bunun yerine wasm girdisinden makine koduna, analiz üzerinden neredeyse doğrudan geçiyor.
Single-pass derleme normalde daha kötü çıktı kodu anlamına gelir. Yazarın karşı argümanı ise şu: wasm binary'leri genellikle LLVM, Rust veya TinyGo gibi front-end araç zincirleri tarafından zaten optimize edilmiş halde geldiğinden, runtime'ın bu işi yeniden keşfetmesi gerekmiyor. WebAssembly'nin bloklar, döngüler, dallar, tipler ve operand yığınıyla yapılandırılmış doğası da derleyiciye işe yarar bilgileri fiili olarak bedelsiz şekilde sunuyor.
Bir araştırma makalesına gönderme yaparak Valent Blocks adını verdiği bir yaklaşıma dayanan Railshot, programın yalnızca register pinning, bounds-check elimination, instruction combining, constant folding, dal basitleştirme ve daha az load/store işlemine izin verecek kadar ayrıntılı olan küçük, geçici görünümlerini koruyor; üstelik tüm bunlar geleneksel bir optimizing compiler'a dönüşmeden yapılıyor.
Öz bildirime dayalı rakamlar, uyarılarla birlikte
Kendi benchmark setinde yazar, Wago'nun wazero'ya kıyasla yaklaşık 5,7 kat daha hızlı derlendiğini, derleme sırasında 11 kat daha az bellek kullandığını, yürütmede yaklaşık %70 daha hızlı olduğunu ve yaklaşık %52 daha az makine kodu ürettiğini raporluyor.
Uyarılar konusunda açık sözlü: hem Wago'yu hem benchmark'ları kendisi yazdı ve okuyucuları bunları bağımsız olarak çalıştırmaya teşvik ediyor. Ayrıca Wago'nun çok yeni olduğunu, hatalar içerdiğini ve kırıcı değişiklikler göreceğini; Wasmtime ve wazero'nun ise hiçbir benchmark grafiğinin ikame edemeyeceği yıllarca süren üretim olgunluğuna sahip olduğunu kabul ediyor.
Plugin'ler ve platform desteği
Wago, derleyicinin ötesine büyüdü. Yazı; modern WebAssembly desteğini (3.0 ve sonrası), çok ucuz instance oluşturmayı, bağımsız native çalıştırılabilir dosyaları, RISC-V devam eden AMD64 ve ARM64 backend'lerini ile macOS, Linux ve Windows host'larını listeliyor.
Daha sıra dışı özellik ise, yalnızca host fonksiyonları eklemek yerine runtime'ın kendisini genişletebilen, custom WebAssembly talimatları ve tipleri dahil plugin sistemi. Bir kavram kanıtı olarak yazar, AVX-512 destekli donanımda 512-bit vektörlerle daha geniş SIMD'yi bir plugin olarak uyguladı. WASI da benzer şekilde opsiyonel ve talep üzerine kuruluyor; böylece kullanıcılar yalnızca gerçekten istedikleri yetenekleri taşıyor. Yazı bu arada Wasmer'ın ticari yönüne bir gönderme yaparak okuyuculara buluta yönelik bir ürün için para ödemek yerine Wago'ya sponsor olmalarını öneriyor.
Neden önemli
WebAssembly runtime manzarası yerleşmiş görünüyordu: Bytecode Alliance destekli Wasmtime, köklü bir ticari oyuncu olarak Wasmer ve Go'daki varsayılan cevap olarak wazero. Wago'nun argümanı, bu alanın bitmediği yönünde; çünkü ucuz derleme ve küçük bellek ayak izi, container'ların ve mikro VM'lerin fazla ağır, mevcut alternatiflerin ise derlemesi çok maliyetli olduğu edge'den serverless'e ve embedded hedeflere kadar her yerde wasm çalıştırmanın ekonomisini değiştiriyor.
Custom talimatlara ve tiplere kadar inen genişletilebilir plugin modeli, sabit bir yığın kiraladığınız değil, sahibi olduğunuz bir platform olarak runtime vizyonunun da taslağını çiziyor.
Tüm bunlar öz bildirime dayalı benchmark'lara ve çok genç koda dayanıyor. Bağımsız doğrulama, spesifikasyon uyumluluğu ve güvenlik sertleştirmesi, Wago'nun gerçek bir rakip mi yoksa ilginç bir deneme mi olacağını belirleyecek. Ancak altyapı faturalarında wasm modüllerini derlemenin bellek maliyeti yer alan ekipler için, test etmeye değer bir proje.
- #webassembly
- #wasm
- #compilers
- #runtime
- #performance