Changelog History
Page 2
-
v1.5.0 Changes
This version adds a debugging interface, which can be used to integrate a debugger.
0๏ธโฃ Based on popular demand, an option is added to throw exceptions when invalid properties are accessed on object maps (default is to return
()
).Also based on popular demand, the
REPL
tool now uses a slightly-enhanced version ofrustyline
for line editing and history.๐ Bug fixes
- ๐ฏ In
Scope::clone_visible
, constants are now properly cloned as constants. - ๐ป Variables introduced inside
try
blocks are now properly cleaned up upon an exception. - ๐ Off-by-one error in character positions after a comment line is now fixed.
- Globally-defined constants are now encapsulated correctly inside a loaded module and no longer spill across call boundaries.
- ๐ Type names display is fixed.
- Exceptions thrown inside function calls now unwrap correctly when
catch
-ed. - ๐ Error messages for certain invalid property accesses are fixed.
Script-breaking changes
- For consistency with the
import
statement, theexport
statement no longer exports multiple variables. - Appending a BLOB to a string (via
+
,+=
,append
or string interpolation) now treats the BLOB as a UTF-8 encoded string. - Appending a string/character to a BLOB (via
+=
orappend
) now adds the string/character as a UTF-8 encoded byte stream.
๐ New features
- A debugging interface is added.
- A new bin tool,
rhai-dbg
(aka The Rhai Debugger), is added to showcase the debugging interface. - ๐ฆ A new package,
DebuggingPackage
, is added which contains theback_trace
function to get the current call stack anywhere in a script. Engine::set_fail_on_invalid_map_property
is added to control whether to raise an error (newEvalAltResult::ErrorPropertyNotFound
) when invalid properties are accessed on object maps.- ๐
Engine::set_allow_shadowing
is added to allow/disallow variables shadowing, with new errorsEvalAltResult::ErrorVariableExists
andParseErrorType::VariableExists
. Engine::on_def_var
allows registering a closure which can decide whether a variable definition is allow to continue, during compilation or runtime, or should fail with an error (ParseErrorType::ForbiddenVariable
orEvalAltResult::ErrorForbiddenVariable
).- ๐ฆ A new syntax for defining custom packages is introduced that removes the need to specify the Rhai crate name (internally uses the
$crate
meta variable).
โจ Enhancements
- 0๏ธโฃ Default features for dependencies (such as
ahash/std
andnum-traits/std
) are no longer required. - The
no_module
feature now eliminates large sections of code via feature gates. - Debug display of
AST
is improved. NativeCallContext::call_level()
is added to give the current nesting level of function calls.- A new feature,
bin-features
, pulls in all the required features forbin
tools. AST
position display is improved:Expr::start_position
is added to give the beginning of the expression (not the operator's position).StmtBlock
andStmt::Block
now keep the position of the closing}
as well.
EvalAltResult::unwrap_inner
is added to access the base error inside multiple layers of wrappings (e.g.EvalAltResult::ErrorInFunction
).- ๐ฆ Yet another new syntax is introduced for
def_package!
that further simplifies the old syntax. - A new method
to_blob
is added to convert a string into a BLOB as UTF-8 encoded bytes. - A new method
to_array
is added to convert a BLOB into array of integers.
REPL tool changes
The REPL bin tool,
rhai-rpl
, has been enhanced.๐ Build changes
- ๐ The
rustyline
feature is now required in order to buildrhai-repl
. - ๐ Therefore,
rhai-repl
is no longer automatically built when using a simplecargo build
with default features.
Line editor
rhai-repl
now uses a modified version ofrustyline
as a line editor with history.- Ctrl-Enter can now be used to enter multiple lines without having to attach the
\
continuation character the end of each line. - ๐ Bracketed paste is supported, even on Windows (version 10 or above), so pasting code directly into
rhai-repl
is made much more convenient.
๐ New commands
strict
to turn on/off Strict Variables Mode.- โก๏ธ
optimize
to turn on/off script optimization. - ๐จ
history
to print lines history. !!
,!
num,!
text and!?
text to recall a history line.- ๐จ
keys
to print all key bindings.
- ๐ฏ In
-
v1.4.1 Changes
๐ This is primarily a bug-fix version which fixes a large number of bugs.
๐ Bug fixes
- Expressions such as
x = x + 1
no longer panics. - Padding arrays with another array via
pad
no longer loops indefinitely. chop
for arrays and BLOB's now works properly.set_bit
for bit-flags with negative index now works correctly.- Misnamed
params
fieldname
in the JSON output ofEngine::gen_fn_metadata_to_json
is fixed (was incorrectly namedtype
). - ๐ Fixes a potential
unsafe
violation infor
loop. - Missing
to_hex
,to_octal
andto_binary
fori128
andu128
are added. - ๐
remove
for arrays and BLOB's now treat negative index correctly. - ๐
parse_int
now works properly for negative numbers. Engine::gen_fn_signatures
now generates signatures for external packages registered viaEngine::register_global_module
.\r\n
pairs are now recognized correctly for doc-comments.
โจ Enhancements
- ๐ Formatting of return types in functions metadata info is improved.
- ๐ Use
SmartString
forScope
variable names and removeunsafe
lifetime casting. - Functions in the standard library now have doc-comments (which can be obtained via
Engine::gen_fn_metadata_to_json
). get
andset
methods are added to arrays, BLOB's, object maps and strings.
- Expressions such as
-
v1.4.0 Changes
This version adds support for integer ranges via the
..
and..=
operators. Many standard API's are extended with range parameters where appropriate.Script-breaking changes
is
is (pun intended) now a reserved keyword to prepare for possible future type checking expressions (e.g.x is "string"
).
๐ฅ Breaking changes
- ๐ฆ
LogicPackage
is removed fromCorePackage
. - ๐ฆ Bit-field functions are moved into a new
BitFieldPackage
(used to be inLogicPackage
) which makes more sense.
๐ Bug fixes
- Custom syntax now works properly inside binary expressions and with method calls.
- ๐ Hex numbers with the high-bit set now parse correctly into negative integer numbers.
- Constructing a literal array or object map now checks for size limits for each item instead of at the very end when it is already too late.
- Non-
INT
integer types are now treated exactly as custom types underonly_i64
andonly_i32
. - Calling
pad
on an array now checks for total size over limit after each item added.
๐ New features
- Added support for integer ranges via the
..
and..=
operators. - โ Added
EvalAltResult::ErrorCustomSyntax
to catch errors in custom syntax, which should not happen unless anAST
is compiled on oneEngine
but evaluated on another unrelatedEngine
.
โจ Enhancements
BLOB
's are refined to display in a more compact hex format.- ๐ฆ A new syntax is introduced for
def_package!
that will replace the old syntax in future versions. - โ Added
NativeCallContext::call_fn
to easily call a function. - ๐ Doc-comments on plugin module functions are extracted into the functions' metadata.
๐ Deprecated API's
Expression::get_variable_name
is deprecated in favor of the newExpression::get_string_value
.- ๐ฆ The old syntax of
def_package!
is deprecated in favor of the new syntax.
-
v1.3.0 Changes
๐ง This version adds native support for
BLOB
's (byte arrays), as well as a number of configuration settings to fine-tun language features.Compiler requirement
- Minimum compiler version is now 1.51.
๐ Bug fixes
- ๐
from_dynamic
now supports deserializingOption
.
๐ New features
- ๐
BLOB
(essentially a byte array) is added as a supported primitive value type parallel to arrays. - ๐ New options for
Engine
which allows disablingif
-expressions,switch
-expressions, statement expressions, anonymous functions and/or looping (i.e.while
,loop
,do
andfor
statements):Engine::set_allow_if_expression
Engine::set_allow_switch_expression
Engine::set_allow_statement_expression
Engine::set_allow_anonymous_fn
Engine::set_allow_looping
- New strict variables mode for
Engine
(enabled viaEngine::set_strict_variables
) to throw parse errors on undefined variable usage. Two new parse error variants,ParseErrorType::VariableNotFound
andParseErrorType::ModuleNotFound
, are added.
โจ Enhancements
- Two double quotes (
""
) in a string literal now maps to"
; two back-ticks (``
) in a literal string now maps to`
. - Added
Engine::register_type_with_name_raw
to register a custom type based on a fully-qualified type path. - Added
into_array
andinto_typed_array
forDynamic
. - Added
FnPtr::call
andFnPtr::call_within_context
to simplify calling a function pointer. - ๐ A function's hashes are included in its JSON metadata to assist in debugging. Each function's
baseHash
field in the JSON object should map directly to the pre-calculated hash in the function call. Expression
now derefs toExpr
.
๐ Deprecated and Gated API's
- ๐
NativeCallContext::new
is deprecated because it is simpler to call a function pointer viaFnPtr::call
. AST::merge_filtered
andAST::combine_filtered
are no longer exported underno_function
.AST::new
andAST::new_with_source
are moved underinternals
.- ๐
FnPtr::call_dynamic
is deprecated in favor ofFnPtr::call_raw
.
-
v1.2.1 Changes
๐ Bug fixes
- Array methods (such as
map
) taking a closure with captures as argument now works properly.
- Array methods (such as
-
v1.2.0 Changes
๐ Bug fixes (potentially script-breaking)
- As originally intended, function calls with a bang (
!
) now operates directly on the caller's scope, allowing variables inside the scope to be mutated. - As originally intended,
Engine::XXX_with_scope
API's now properly propagate constants within the provided scope also to functions in the script. - ๐จ Printing of integral floating-point numbers is fixed (used to only prints
0.0
). func!()
calls now work properly underno_closure
.- ๐ Fixed parsing of unary negation such that expressions like
if foo { ... } -x
parses correctly.
๐ New features
- ๐
#[cfg(...)]
attributes can now be put directly on plugin functions or function defined in a plugin module. - ๐ A custom syntax parser can now return a symbol starting with
$$
to inform the implementation function which syntax variant was actually parsed. AST::iter_literal_variables
is added to extract all top-level literal constant/variable definitions from a script without running it.Engine::call_fn_dynamic
is deprecated andEngine::call_fn_raw
is added which allows keeping new variables in the custom scope.
โจ Enhancements
- Array methods now avoid cloning as much as possible (although most predicates will involve cloning anyway if passed a closure).
- Array methods that take function pointers (e.g. closures) now optionally take the function name as a string.
- Array adds the
dedup
method. - Array adds a
sort
method with no parameters which sorts homogeneous arrays of built-in comparable types (e.g.INT
). - Inlining is disabled for error-path functions because errors are exceptional and scripts usually fail completely when an error is encountered.
- โก๏ธ The
optimize
module is completely eliminated underno_optimize
, which should yield smaller code size. NativeCallContext::position
is added to return the position of the function call.- ๐ฏ
Scope::clone_visible
is added that copies only the last instance of each variable, omitting all shadowed variables.
๐ Deprecated API's
NativeCallContext::call_fn_dynamic_raw
is deprecated andNativeCallContext::call_fn_raw
is added.- ๐
From<EvalAltResult>
forResult<T, Box<EvalAltResult> >
is deprecated so it will no longer be possible to doEvalAltResult::ErrorXXXXX.into()
to convert to aResult
; instead,Err(EvalAltResult:ErrorXXXXX.into())
must be used. Code is clearer if errors are explicitly wrapped inErr
.
- As originally intended, function calls with a bang (
-
v1.1.2 Changes
๐ Bug fixes
- ๐จ
0.0
now prints correctly (used to print0e0
). - Unary operators are now properly recognized as an expression statement.
- Reverses a regression on string
+
operations. - ๐ฆ The global namespace is now searched before packages, which is the correct behavior.
- ๐จ
-
v1.1.1 Changes
๐ Bug fixes
- Assignment to indexing expression with dot expressions inside no longer cause a compilation error.
- The
no_module
andinternals
features now work together without a compilation error. - โก๏ธ String literal operations (such as
"hello" + ", world"
) now optimizes correctly.
-
v1.1.0 Changes
๐ Bug fixes
- Custom syntax starting with a disabled standard keyword now works properly.
- ๐ When calling
Engine::call_fn
, new variables defined during evaluation of the body script are removed and no longer spill into the function call. - ๐
NamespaceRef::new
is fixed.
โจ Enhancements
Engine
APIEngine::consume_XXX
methods are renamed toEngine::run_XXX
to make meanings clearer. Theconsume_XXX
API is deprecated.Engine::register_type_XXX
are now available even underno_object
.- ๐ Added
Engine::on_parse_token
to allow remapping certain tokens during parsing. - Added
Engine::const_empty_string
to merge empty strings into a single instance.
Custom Syntax
- ๐
$symbol$
is supported in custom syntax to match any symbol. - Custom syntax with
$block$
,}
or;
as the last symbol are now self-terminating (i.e. no need to attach a terminating;
).
Dynamic
ValuesDynamic::as_string
andDynamic::as_immutable_string
are deprecated and replaced byinto_string
andinto_immutable_string
respectively.- โ Added a number of constants to
Dynamic
. - โ Added a number of constants and
fromXXX
constant methods toDynamic
. - โ Added
sin
,cos
andtan
forDecimal
values.
Decimal
Valuesparse_float()
,PI()
andE()
now defer toDecimal
underno_float
ifdecimal
is turned on.- โ Added
log10()
forDecimal
. ln
forDecimal
is now checked and won't panic.
String Values
SmartString
now usesLazyCompact
instead ofCompact
to minimize allocations.- โ Added
pop
for strings. - โ Added
ImmutableString::ptr_eq
to test if two strings point to the same allocation. - ๐ The
serde
feature ofSmartString
is turned on undermetadata
to makeMap
serializable.
Scope
APIScope::set_value
now takes anything that implementsInto<Cow<str> >
.- โ Added
Scope::is_constant
to check if a variable is constant. - Added
Scope::set_or_push
to add a new variable only if one doesn't already exist.
AST
API- โ Added
ASTNode::position
. - ๐
ReturnType
is removed in favor of option flags forStmt::Return
. - ๐
Stmt::Break
andStmt::Continue
are merged intoStmt::BreakLoop
via an option flag. StaticVec
is changed to keep three items inline instead of four.
-
v1.0.6 Changes
๐ Bug fixes
- Eliminate unnecessary property write-back when accessed via a getter since property getters are assumed to be pure.
- Writing to a property of an indexed valued obtained via an indexer now works properly by writing back the changed value via an index setter.
โจ Enhancements
- ๐
MultiInputsStream
,ParseState
,TokenIterator
,IdentifierBuilder
andAccessMode
are exported under theinternals
feature.