- 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
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
.
Ah, parece que cambió. Ya lo corregí. Gracias.