12 puntos por xguru 2025-05-09 | 2 comentarios | Compartir por WhatsApp
  • Un motor de JavaScript ligero basado en PrimJS, compilado a WebAssembly, lo que le da seguridad y gran portabilidad
  • Asegura seguridad y escalabilidad con una sólida arquitectura de sandbox que ofrece seguridad de memoria y limitación de funciones de JavaScript, junto con una filosofía de “fail-fast”
  • Puede ejecutar en paralelo cientos de VM incluso en una sola máquina, y también permite configurar límites de memoria y de cómputo (gas) para los scripts
  • Se puede integrar en casi cualquier plataforma con un solo archivo .wasm, sin builds complejos ni FFI, y además su tamaño es muy pequeño: alrededor de 800 KB
  • Ofrece hasta 28% más rendimiento que QuickJS, y en entornos con JIT brinda velocidad de ejecución cercana a la nativa

Hako: un motor de JavaScript pequeño, rápido y seguro

¿Qué es Hako?

  • Un motor de JavaScript portable, orientado a la seguridad y de alto rendimiento desarrollado sobre PrimJS
  • El nombre Hako proviene de la palabra japonesa para “caja” (箱)
  • Un motor basado en WebAssembly diseñado para que cualquiera pueda integrarlo fácilmente en cualquier entorno

Seguridad: memoria segura y funciones limitadas

  • Está escrito en C/C++, pero compilado a WebAssembly → garantiza seguridad de memoria y sandbox de ejecución
  • También se pueden restringir funciones del propio JavaScript:
    • eliminar funciones específicas
    • limitarlo para que no pueda asignar memoria
    • establecer límites de tiempo de ejecución, uso de memoria y gas, entre otros
  • A través de VMContext, es posible identificar usuarios maliciosos y controlar recursos
  • La estrategia fail-fast detiene temprano el código inestable o que consume recursos en exceso

Facilidad de integración: basta con un solo .wasm

  • No usa Emscripten → se puede integrar con cualquier runtime moderno de WebAssembly
  • No requiere wrappers FFI para distintos lenguajes → se puede usar sin procesos de build complejos
  • Ejemplo: ofrece una guía para integrar Hako en Go
  • El build de lanzamiento está compuesto por un archivo .wasm de solo 800 KB

Rendimiento: más rápido que QuickJS

  • Así como PrimJS es más rápido que QuickJS, Hako también ofrece una mejora promedio de rendimiento del 28% frente a QuickJS
  • Maximiza el rendimiento con optimizaciones SIMD y mejoras en algunas rutas críticas
  • No hay penalización de rendimiento por usar WebAssembly — gracias a la optimización JIT en V8, Wasmtime y JavaScriptCore, alcanza un nivel casi nativo
  • También incluye una API integrada para medición de rendimiento y profiling

Limitaciones y planes a futuro

  • Algunas funciones usadas en PrimJS (intérprete de plantillas, snapshots de GC) todavía no tienen soporte completo
  • Como la herramienta de snapshots de ByteDance aún no se ha liberado como open source, el desarrollador está implementando una herramienta propia
  • Actualmente está en una fase beta temprana, y el feedback es muy importante para estabilizar la API/ABI
  • GitHub - hako

2 comentarios

 
secret3056 2025-05-09

Parece que https://github.com/fernvenue/hako-go-example
es un enlace inexistente. El ejemplo de embebido en Go
parece ser
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
.

 
xguru 2025-05-09

Ah, parece que cambió. Ya lo corregí. Gracias.