4 points par xguru 2025-09-19 | 3 commentaires | Partager sur WhatsApp
  • Langage de script et moteur d’exécution pouvant être intégrés facilement dans des applications Rust
  • Conçu pour permettre d’ajouter une logique dynamique via des scripts externes ou de créer un DSL personnalisé
  • Offre une architecture pensée à la fois pour la compatibilité avec Rust, les performances, la sécurité et l’extensibilité
  • Fonctionne sur toutes les plateformes prises en charge par Rust à partir de Rust 1.66.0+ (WASM, no-std)
  • Syntaxe : langage à typage dynamique proche de JavaScript + Rust
  • Performances : 0,14 seconde pour 1 million d’itérations sur une VM Linux monocœur à 2,6 GHz
  • Intégration native à Rust : prise en charge des fonctions, types, getter/setter, méthodes et indexeurs Rust
  • Les valeurs Rust peuvent être transmises au script comme variables/constantes (via Scope)
  • Prise en charge des principaux types de données : booléens, entiers, nombres à virgule flottante, Decimal, chaînes, caractères Unicode, tableaux, tableaux d’octets, maps d’objets
  • Les fonctions définies dans les scripts Rhai peuvent être appelées depuis Rust
  • Dépendances minimales (seulement quelques bibliothèques comme smallvec, thin-vec, etc.)
  • Moteur re-entrant : Send + Sync possible via sync
  • Fournit des fonctionnalités de compilation et d’optimisation d’AST
  • Prise en charge d’un système de plugins et de l’extension de l’API via des macros
  • Prend en charge la surcharge de fonctions/opérateurs, les pointeurs de fonction, le currying, les closures et certains patterns POO
  • Fournit un système de modules permettant de composer dynamiquement une base de code
  • Prise en charge de la sérialisation/désérialisation serde (optionnelle)
  • Fournit une interface de débogage

Sécurité et fiabilité

  • Garantie Don’t Panic : toute panique est considérée comme un bug, le système hôte reste sûr
  • Exécution en sandbox : impossible de modifier l’environnement externe sauf autorisation explicite
  • Protection contre les attaques malveillantes : blocage des stack overflows, des volumes de données excessifs et des exécutions infinies
  • Suivi de l’état d’avancement de l’exécution et arrêt manuel possible
  • Vérification Miri réussie

Pour celles et ceux qui veulent créer un langage personnalisé

  • Rhai peut être utilisé comme DSL
  • Il est possible de désactiver certaines fonctionnalités du langage, comme les boucles
  • Les mots-clés/opérateurs peuvent être désactivés ou limités
  • Il est possible d’ajouter des opérateurs personnalisés et d’étendre la syntaxe

Ressources supplémentaires

Licence

  • Au choix : Apache 2.0 ou MIT
  • Le code contribué est soumis par défaut à une double licence

3 commentaires

 
sftblw 2025-09-19

Si vous cherchez un langage de scripting, il y a une liste assez fournie sur are we game yet.

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

Il n’apparaît pas dans cette liste, mais récemment, en demandant à GPT, j’ai aussi découvert un langage de scripting appelé koto. Je n’y ai jeté qu’un rapide coup d’œil avant de passer à autre chose, mais ça avait l’air pas mal aussi.

https://koto.dev/

En faisant des recherches, j’ai aussi trouvé quelque chose qui s’appelle roto. Je ne suis pas allé jusqu’à regarder de quoi il s’agissait exactement, mais l’organisation qui l’a créé me disait vaguement quelque chose.

https://github.com/NLnetLabs/roto

 
coremaker 2025-09-19

Il y a des exemples de mesure du temps dans le playground wasm, mais ce n’est pas rapide, si ?

 
sftblw 2025-09-19

Comme il s’agit d’un langage destiné au scripting, il est normal qu’il ne soit pas rapide.