rhai/doc/src/about/features.md

67 lines
2.3 KiB
Markdown
Raw Normal View History

2020-06-20 06:06:17 +02:00
Features
========
{{#include ../links.md}}
Easy
----
2020-06-22 16:02:49 +02:00
* Easy-to-use language similar to JavaScript+Rust with dynamic typing.
2020-06-20 06:06:17 +02:00
2020-06-29 17:55:28 +02:00
* Tight integration with native Rust [functions] and [types][custom types], including [getters/setters], [methods][custom type] and [indexers].
2020-06-20 06:06:17 +02:00
* Freely pass Rust variables/constants into a script via an external [`Scope`].
2020-06-20 09:57:15 +02:00
* Easily [call a script-defined function]({{rootUrl}}/engine/call-fn.md) from Rust.
2020-06-20 06:06:17 +02:00
* Very few additional dependencies (right now only [`num-traits`](https://crates.io/crates/num-traits/) to do checked arithmetic operations);
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.
2020-07-04 16:53:00 +02:00
* Fairly efficient evaluation (1 million iterations in 0.3 sec on a single core, 2.3 GHz Linux VM).
2020-06-20 06:06:17 +02:00
2020-06-27 04:43:57 +02:00
* Scripts are [optimized][script optimization] (useful for template-based machine-generated scripts) for repeated evaluations.
2020-06-20 06:06:17 +02:00
Dynamic
-------
2020-06-20 09:57:15 +02:00
* [Function overloading]({{rootUrl}}/language/overload.md).
2020-06-20 06:06:17 +02:00
2020-06-20 09:57:15 +02:00
* [Operator overloading]({{rootUrl}}/rust/operators.md).
2020-06-20 06:06:17 +02:00
* Organize code base with dynamically-loadable [modules].
2020-06-25 13:22:14 +02:00
* Dynamic dispatch via [function pointers].
2020-06-25 12:07:57 +02:00
2020-06-27 11:34:39 +02:00
* Some support for [object-oriented programming (OOP)][OOP].
2020-06-26 04:39:18 +02:00
2020-07-03 11:19:55 +02:00
* Serialization/deserialization support via [`serde`].
2020-06-20 06:06:17 +02:00
Safe
----
* Relatively little `unsafe` code (yes there are some for performance reasons, and most `unsafe` code is limited to
one single source file, all with names starting with `"unsafe_"`).
Rugged
------
* Sand-boxed - the scripting [`Engine`], if declared immutable, cannot mutate the containing environment unless explicitly permitted (e.g. via a `RefCell`).
2020-06-27 04:43:57 +02:00
* 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.
2020-06-20 06:06:17 +02:00
* Track script evaluation [progress] and manually terminate a script run.
Flexible
--------
* Re-entrant scripting [`Engine`] can be made `Send + Sync` (via the [`sync`] feature).
* Support for [minimal builds] by excluding unneeded language [features].
* Supports [most build targets](targets.md) including `no-std` and [WASM].