Add release notes.
This commit is contained in:
66
RELEASES.md
Normal file
66
RELEASES.md
Normal file
@@ -0,0 +1,66 @@
|
||||
Rhai Release Notes
|
||||
==================
|
||||
|
||||
Version 0.14.1
|
||||
==============
|
||||
|
||||
The major features for this release is modules, script resource limits, and speed improvements
|
||||
(mainly due to avoiding allocations).
|
||||
|
||||
New features
|
||||
------------
|
||||
|
||||
* Modules and _module resolvers_ allow loading external scripts under a module namespace.
|
||||
A module can contain constant variables, Rust functions and Rhai functions.
|
||||
* `export` variables and `private` functions.
|
||||
* _Indexers_ for Rust types.
|
||||
* Track script evaluation progress and terminate script run.
|
||||
* Set limit on maximum number of operations allowed per script run.
|
||||
* Set limit on maximum number of modules loaded per script run.
|
||||
* A new API, `Engine::compile_scripts_with_scope`, can compile a list of script segments without needing to
|
||||
first concatenate them together into one large string.
|
||||
* Stepped `range` function with a custom step.
|
||||
|
||||
Speed improvements
|
||||
------------------
|
||||
|
||||
### `StaticVec`
|
||||
|
||||
A script contains many lists - statements in a block, arguments to a function call etc.
|
||||
In a typical script, most of these lists tend to be short - e.g. the vast majority of function calls contain
|
||||
fewer than 4 arguments, while most statement blocks have fewer than 4-5 statements, with one or two being
|
||||
the most common. Before, dynamic `Vec`'s are used to hold these short lists for very brief periods of time,
|
||||
causing allocations churn.
|
||||
|
||||
In this version, large amounts of allocations are avoided by converting to a `StaticVec` -
|
||||
a list type based on a static array for a small number of items (currently four) -
|
||||
wherever possible plus other tricks. Most real-life scripts should see material speed increases.
|
||||
|
||||
### Pre-computed variable lookups
|
||||
|
||||
Almost all variable lookups, as well as lookups in loaded modules, are now pre-computed.
|
||||
A variable's name is almost never used to search for the variable in the current scope.
|
||||
|
||||
_Getters_ and _setter_ function names are also pre-computed and cached, so no string allocations are
|
||||
performed during a property get/set call.
|
||||
|
||||
### Pre-computed function call hashes
|
||||
|
||||
Lookup of all function calls, including Rust and Rhai ones, are now through pre-computed hashes.
|
||||
The function name is no longer used to search for a function, making function call dispatches
|
||||
much faster.
|
||||
|
||||
### Large Boxes for expressions and statements
|
||||
|
||||
The expression (`Expr`) and statement (`Stmt`) types are modified so that all of the variants contain only
|
||||
one single `Box` to a large allocated structure containing _all_ the fields. This makes the `Expr` and
|
||||
`Stmt` types very small (only one single pointer) and improves evaluation speed due to cache efficiency.
|
||||
|
||||
Error handling
|
||||
--------------
|
||||
|
||||
Previously, when an error occurs inside a function call, the error position reported is the function
|
||||
call site. This makes it difficult to diagnose the actual location of the error within the function.
|
||||
|
||||
A new error variant `EvalAltResult::ErrorInFunctionCall` is added in this version.
|
||||
It wraps the internal error returned by the called function, including the error position within the function.
|
Reference in New Issue
Block a user