12 puan yazan xguru 2025-05-09 | 2 yorum | WhatsApp'ta paylaş
  • 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

 
secret3056 2025-05-09

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.

 
xguru 2025-05-09

Aaa, sanırım değişmiş. Düzelttim. Teşekkürler.