Programming Languages Rhai - Embedded Scripting for Rust No.627bca167e84024c6ea07392 Sticky
NiQin updated at 2022-05-11 22:37:10+08:00
Hits: 236634
Keys/tags: rust rhai embedded-scripting embedded-scripting-for-rust
Rhai is an embedded scripting language and evaluation engine for Rust that gives a safe and easy way to add scripting to any application. Targets and builds - * All CPU and O/S targets supported by Rust, including: * WebAssembly (WASM) * `no-std` * Minimum Rust version 1.57 Standard features - * Simple language similar to JavaScript+Rust with dynamic typing. * Fairly efficient evaluation (1 million iterations in 0.3 sec on a single-core, 2.3 GHz Linux VM). * Tight integration with native Rust functions and types, including getters/setters, methods and indexers. * Freely pass Rust values into a script as variables/constants via an external Scope - all clonable Rust types are supported; no need to implement any special trait. Or tap directly into the variable resolution process. * Built-in support for most common data types including booleans, integers, floating-point numbers (including Decimal), strings, Unicode characters, arrays (including packed byte arrays) and object maps. * Easily call a script-defined function from Rust. * Relatively little unsafe code (yes there are some for performance reasons). * Few dependencies - currently only smallvec, num-traits, ahash, bitflags and smartstring. * Re-entrant scripting engine can be made Send + Sync (via the sync feature). * Compile once to AST form for repeated evaluations. * Scripts are optimized (useful for template-based machine-generated scripts). * Easy custom API development via plugins system powered by procedural macros. * Function overloading and operator overloading. * Dynamic dispatch via function pointers with additional support for currying. * Closures (anonymous functions) that can capture shared values. * Some syntactic support for object-oriented programming (OOP). * Organize code base with dynamically-loadable modules, optionally overriding the resolution process. * Serialization/deserialization support via serde (requires the serde feature). * Support for minimal builds by excluding unneeded language features. * A debugging interface. Protected against attacks - * Don't Panic guarantee - Any panic is a bug. Rhai subscribes to the motto that a library should never panic the host system, and is coded with this in mind. * Sand-boxed - the scripting engine, if declared immutable, cannot mutate the containing environment unless explicitly permitted. * Rugged - protected against malicious attacks (such as stack-overflow, over-sized data, and runaway scripts etc.) that may come from untrusted third-party user-land scripts. * Track script evaluation progress and manually terminate a script run. * Passes Miri. For those who actually want their own language - * Use as a DSL. * Disable certain language features such as looping. * Further restrict the language by surgically disabling keywords and operators. * Define custom operators. * Extend the language with custom syntax.