4 puntos por xguru 2025-09-19 | 3 comentarios | Compartir por WhatsApp
  • Lenguaje de scripting y motor de ejecución que se puede integrar fácilmente en aplicaciones Rust
  • Diseñado para agregar lógica dinámica mediante scripts externos o para crear DSL personalizados
  • Ofrece una arquitectura con alta compatibilidad con Rust, considerando rendimiento, seguridad y extensibilidad
  • Funciona en todas las plataformas compatibles con Rust sobre Rust 1.66.0+ (WASM, no-std)
  • La sintaxis es la de un lenguaje de tipado dinámico similar a JavaScript + Rust
  • Rendimiento: 0.14 segundos para ejecutar 1 millón de iteraciones en una VM Linux de un solo núcleo a 2.6GHz
  • Integración nativa con Rust: soporte para funciones, tipos, getter/setter, métodos e indexadores de Rust
  • Los valores de Rust se pueden pasar al script como variables/constantes (usando Scope)
  • Soporta los principales tipos de datos: booleanos, enteros, punto flotante, Decimal, cadenas, caracteres Unicode, arreglos, arreglos de bytes y mapas de objetos
  • Las funciones definidas en scripts Rhai se pueden invocar desde Rust
  • Dependencias mínimas (solo unas pocas bibliotecas como smallvec, thin-vec, etc.)
  • Motor re-entrant: puede ser Send + Sync mediante sync
  • Incluye compilación y optimización de AST
  • Soporta sistema de plugins y extensión de API basada en macros
  • Soporta sobrecarga de funciones/operadores, punteros a función, currificación, closures y algunos patrones OOP
  • Proporciona un sistema de módulos para componer dinámicamente la base de código
  • Soporte opcional para serialización/deserialización con serde
  • Incluye interfaz de depuración

Seguridad y robustez

  • Garantía de Don’t Panic: si ocurre un panic, se considera un bug; el sistema host permanece seguro
  • Ejecución en sandbox: no puede modificar el entorno externo a menos que se permita explícitamente
  • Protección contra ataques maliciosos: bloqueo de stack overflow, datos excesivos y ejecución infinita
  • Permite rastrear el progreso de la ejecución y detenerla manualmente
  • Pasó las verificaciones de Miri

Para quienes quieren crear un lenguaje personalizado

  • Rhai se puede usar como DSL
  • Se pueden desactivar funciones específicas del lenguaje, como los bucles
  • Se pueden desactivar y restringir palabras clave/operadores
  • Se pueden agregar operadores definidos por el usuario y extensiones de sintaxis

Material adicional

Licencia

  • Se puede elegir entre Apache 2.0 o MIT
  • El código aportado queda bajo licencia dual por defecto

3 comentarios

 
sftblw 2025-09-19

Si están buscando un lenguaje de scripting, hay una lista bastante útil en are we game yet.

https://arewegameyet.rs/ecosystem/scripting/

No aparece en esa lista, pero hace poco, preguntándole a GPT, también descubrí un lenguaje de scripting llamado koto; solo lo revisé por encima, pero también se veía bastante bien.

https://koto.dev/

Buscando, también encontré uno llamado roto; no llegué a revisar qué tal era, pero el lugar que lo desarrolla me sonaba de algo.

https://github.com/NLnetLabs/roto

 
coremaker 2025-09-19

Hay ejemplos de medición de tiempo en el playground de wasm, pero ¿no son rápidos?

 
sftblw 2025-09-19

Como es un lenguaje para scripting, es normal que no sea rápido.