rhai/doc/src/about/features.md
2020-08-23 11:16:08 +08:00

2.5 KiB

Features

{{#include ../links.md}}

Easy

  • Easy-to-use language similar to JavaScript+Rust with dynamic typing.

  • Tight integration with native Rust [functions] and [types][custom types], including [getters/setters], [methods][custom type] and [indexers].

  • Freely pass Rust variables/constants into a script via an external [Scope].

  • Easily call a script-defined function from Rust.

  • Very few additional dependencies (right now only smallvec); for [no-std] builds, a number of additional dependencies are pulled in to provide for functionalities that used to be in std.

Fast

  • Fairly low compile-time overhead.

  • Fairly efficient evaluation (1 million iterations in 0.3 sec on a single core, 2.3 GHz Linux VM).

  • Scripts are [optimized][script optimization] (useful for template-based machine-generated scripts) for repeated evaluations.

Dynamic

  • Function overloading.

  • Operator overloading.

  • Organize code base with dynamically-loadable [modules].

  • Dynamic dispatch via [function pointers] with additional support for [currying].

  • Closures via [automatic currying] with capturing shared variables from the external scope.

  • Some support for [object-oriented programming (OOP)][OOP].

Safe

  • Relatively little unsafe code (yes there are some for performance reasons).

  • 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][maximum call stack depth], [over-sized data][maximum length of strings], and [runaway scripts][maximum number of operations] etc.) that may come from untrusted third-party user-land scripts.

  • Track script evaluation [progress] and manually terminate a script run.

Flexible

  • Re-entrant scripting [Engine] can be made Send + Sync (via the [sync] feature).

  • Serialization/deserialization support via serde.

  • Support for [minimal builds] by excluding unneeded language [features].

  • Supports most build targets including no-std and [WASM].

  • Surgically [disable keywords and operators] to restrict the language.

  • Use as a [DSL] by [disabling keywords/operators][disable keywords and operators], [custom operators] and extending the language with [custom syntax].