12 pontos por xguru 2025-05-09 | 2 comentários | Compartilhar no WhatsApp
  • Um engine JavaScript leve baseado em PrimJS, compilado para WebAssembly, oferecendo segurança e alta portabilidade
  • Estrutura robusta de sandbox com segurança de memória, restrição de recursos da linguagem JavaScript e filosofia de fail-fast, garantindo segurança e escalabilidade
  • É possível executar centenas de VMs em paralelo até mesmo em uma única máquina, com limites configuráveis para memória e uso computacional (gas) dos scripts
  • Pode ser embutido em praticamente qualquer plataforma com um único arquivo .wasm, sem builds complexos nem FFI, e também é muito pequeno, com cerca de 800 KB
  • Até 28% mais desempenho que o QuickJS e, em ambientes com JIT, velocidade de execução próxima da nativa

Hako: um engine JavaScript pequeno, rápido e seguro

O que é o Hako?

  • Um engine JavaScript portátil, focado em segurança e de alto desempenho, desenvolvido com base no PrimJS
  • O nome Hako vem do japonês e significa “caixa” (箱)
  • Um engine baseado em WebAssembly, projetado para que qualquer pessoa possa embuti-lo facilmente em qualquer ambiente

Segurança: memória segura e restrição de funcionalidades

  • Escrito em C/C++, mas compilado para WebAssembly → garante segurança de memória e sandbox de execução
  • Também é possível restringir funcionalidades do próprio JavaScript:
    • remover funções específicas
    • impedir alocação de memória
    • limitar tempo de execução, uso de memória, gas etc.
  • Com VMContext, é possível identificar usuários maliciosos e controlar recursos
  • A estratégia de fail-fast interrompe cedo códigos instáveis ou com uso excessivo de recursos

Facilidade de embutir: basta um único .wasm

  • Não usa Emscripten → pode ser embutido em qualquer runtime WebAssembly moderno
  • Não requer wrappers FFI para várias linguagens → pode ser usado sem processos de build complexos
  • Exemplo: exemplo de como embutir o Hako em Go
  • O build de release é composto por apenas um arquivo .wasm de 800 KB

Desempenho: mais rápido que o QuickJS

  • Assim como o PrimJS é mais rápido que o QuickJS, o Hako também oferece melhoria média de 28% em desempenho em comparação com o QuickJS
  • Otimizações com SIMD e melhorias em alguns hot paths maximizam o desempenho
  • Não há perda de desempenho por causa do WebAssembly — em V8, Wasmtime e JavaScriptCore, fica em nível quase nativo graças às otimizações JIT
  • APIs de medição de desempenho e profiling também já vêm embutidas

Limitações e planos futuros

  • Alguns recursos usados no PrimJS (interpretador de templates, snapshots de GC) ainda não têm suporte completo
  • Como a ferramenta de snapshot da ByteDance ainda não foi open source, o desenvolvedor está implementando uma ferramenta própria
  • No momento, está em fase beta inicial, e o feedback é muito importante para estabilizar a API/ABI
  • GitHub - hako

2 comentários

 
secret3056 2025-05-09

https://github.com/fernvenue/hako-go-example
parece ser um link inexistente. O exemplo de embedding em Go
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
aparentemente é este.

 
xguru 2025-05-09

Ah, parece que mudou. Já corrigi. Obrigado.