4 pontos por xguru 2025-09-19 | 3 comentários | Compartilhar no WhatsApp
  • Linguagem de script e engine de execução que pode ser embutida facilmente em aplicações Rust
  • Projetada para permitir adicionar lógica dinâmica por meio de scripts externos ou criar uma DSL personalizada
  • Alta compatibilidade com Rust, oferecendo uma arquitetura que considera desempenho, segurança e extensibilidade
  • Funciona em todas as plataformas compatíveis com Rust com Rust 1.66.0+ (WASM, no-std)
  • A sintaxe é de uma linguagem com tipagem dinâmica, semelhante a JavaScript + Rust
  • Desempenho: 0,14 segundo para executar 1 milhão de iterações em uma VM Linux single-core de 2,6GHz
  • Integração nativa com Rust: suporte a funções, tipos, getter/setter, métodos e indexadores do Rust
  • Valores Rust podem ser passados ao script como variáveis/constantes (usando Scope)
  • Suporte aos principais tipos de dados: booleano, inteiro, ponto flutuante, Decimal, string, caractere Unicode, array, array de bytes, mapa de objetos
  • Funções definidas em scripts Rhai podem ser chamadas a partir de Rust
  • Dependências mínimas (usa apenas poucas bibliotecas, como smallvec e thin-vec)
  • Engine reentrante: com sync, pode oferecer Send + Sync
  • Fornece compilação e otimização de AST
  • Suporte a sistema de plugins e extensão de API baseada em macros
  • Suporta sobrecarga de função/operador, ponteiros de função, currying, closures e alguns padrões de OOP
  • Fornece um sistema de módulos, permitindo compor a base de código dinamicamente
  • Suporte opcional a serialização/desserialização com serde
  • Fornece interface de depuração

Segurança e proteção

  • Garantia de Don’t Panic: se ocorrer panic, isso é considerado bug; o sistema hospedeiro permanece seguro
  • Execução em sandbox: não é possível alterar o ambiente externo, a menos que isso seja explicitamente permitido
  • Proteção contra ataques maliciosos: bloqueia stack overflow, excesso de dados e execução infinita
  • Permite rastrear o progresso da execução e encerrá-la manualmente
  • Passou na verificação com Miri

Para quem quer criar uma linguagem personalizada

  • Rhai pode ser usado como DSL
  • É possível desativar recursos específicos da linguagem, como loops
  • É possível desativar e restringir palavras-chave/operadores
  • É possível adicionar operadores definidos pelo usuário e estender a sintaxe

Materiais adicionais

Licença

  • Pode ser escolhido entre Apache 2.0 ou MIT
  • O código contribuído segue, por padrão, licenciamento duplo

3 comentários

 
sftblw 2025-09-19

Se você está procurando uma linguagem de script, há uma lista no are we game yet.

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

Não está nessa lista, mas recentemente, enquanto perguntava ao GPT, também descobri uma linguagem de script chamada koto. Dei só uma olhada rápida, mas ela também pareceu boa.

https://koto.dev/

Enquanto pesquisava, também encontrei algo chamado roto, mas não cheguei a ver exatamente do que se trata. Ainda assim, o lugar que a criou me pareceu familiar.

https://github.com/NLnetLabs/roto

 
coremaker 2025-09-19

Existem exemplos de medição de tempo no playground wasm, mas não parecem rápidos, né?

 
sftblw 2025-09-19

Como é uma linguagem voltada para scripts, é normal que não seja rápida.