- PrimJS tabanlı hafif bir JavaScript motoru; WebAssembly'e derlenerek güvenli ve yüksek taşınabilirlik sunar
- Bellek güvenliği ve JavaScript özelliklerini kısıtlama imkânı sunan güçlü bir sandbox yapısı ve
fail-fast felsefesiyle güvenlik ve ölçeklenebilirlik sağlar
- Tek bir makinede bile yüzlerce VM'i paralel çalıştırabilir; betiklerin bellek ve işlem miktarı (
gas) sınırları da ayarlanabilir
- Karmaşık build süreci veya FFI olmadan tek bir
.wasm dosyasıyla neredeyse tüm platformlara gömülebilir; boyutu da yaklaşık 800KB ile oldukça küçüktür
- QuickJS'ye kıyasla %28'e kadar daha iyi performans sunar; JIT ortamlarında native seviyeye yakın çalışma hızı sağlar
Hako: küçük, hızlı ve güvenli bir JavaScript motoru
Hako nedir?
- PrimJS tabanlı, taşınabilir, güvenlik odaklı ve yüksek performanslı bir JavaScript motoru
- Hako adı, Japoncada “kutu(箱)” anlamına gelen kelimeden türemiştir
- Herkesin her ortamda kolayca gömebilmesi için tasarlanmış WebAssembly tabanlı bir motor
Güvenlik: bellek güvenliği ve özellik kısıtlama
- C/C++ ile yazılmıştır ancak WebAssembly'e derlenir → bellek güvenliği ve çalıştırma sandbox'ı sağlar
- JavaScript özellikleri de doğrudan kısıtlanabilir:
- belirli işlevleri kaldırma
- bellek ayırmayı engelleyecek şekilde sınırlama
- çalışma süresi, bellek kullanımı,
gas gibi sınırlar koyma
VMContext üzerinden kötü niyetli kullanıcıları tespit etme ve kaynakları kontrol etme mümkündür
fail-fast stratejisi, kararsız veya aşırı kaynak tüketen kodu erken durdurur
Gömme kolaylığı: tek başına bir .wasm dosyası yeterli
- Emscripten kullanılmaz → modern bir WebAssembly runtime'ı olan her yerde gömülebilir
- Çeşitli diller için FFI wrapper'larına gerek yoktur → karmaşık build süreçleri olmadan kullanılabilir
- Örnek: Go'da Hako gömme örneği sunuluyor
- Release build, yalnızca 800KB boyutunda bir
.wasm dosyasından oluşur
Performans: QuickJS'den daha hızlı
- PrimJS nasıl QuickJS'den daha hızlıysa, Hako da QuickJS'ye kıyasla ortalama %28 performans artışı sunar
- SIMD optimizasyonu ve bazı hot-path iyileştirmeleriyle performans en üst düzeye çıkarılmıştır
- WebAssembly kaynaklı belirgin bir performans kaybı yoktur — V8, Wasmtime ve JavaScriptCore'da JIT optimizasyonları sayesinde neredeyse native seviyededir
- Performans ölçümü ve profiling API'si de yerleşik olarak sunulur
Sınırlamalar ve gelecek planları
- PrimJS'te kullanılan bazı özellikler (template interpreter, GC snapshot) henüz tam olarak desteklenmiyor
- ByteDance'in snapshot aracı henüz açık kaynak yapılmadığı için geliştirici kendi aracını geliştiriyor
- Şu anda erken beta aşamasında ve API/ABI stabilizasyonu için geri bildirim çok önemli
- GitHub - hako
2 yorum
https://github.com/fernvenue/hako-go-example
sanırım var olmayan bir bağlantı. Go gömme örneği ise
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
gibi görünüyor.
Aaa, sanırım değişmiş. Düzelttim. Teşekkürler.