Skip to content

Releases: rhaiscript/rhai

v1.2.0

19 Nov 06:56
df07eaa
Compare
Choose a tag to compare

Version 1.2.0 released to crates.io.

Bug fixes with breaking script changes

  • 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 under no_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 and Engine::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 under no_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 and NativeCallContext::call_fn_raw is added.
  • From<EvalAltResult> for Result<T, Box<EvalAltResult>> is deprecated so it will no longer be possible to do EvalAltResult::ErrorXXXXX.into() to convert to a Result; instead, Err(EvalAltResult:ErrorXXXXX.into()) must be used. Code is clearer if errors are explicitly wrapped in Err.

v1.1.2

05 Nov 15:56
c21fb23
Compare
Choose a tag to compare

This release fixes a number of bugs:

  • 0.0 now prints correctly (used to print 0e0).
  • Unary operators are now properly recognized as an expression statement.
  • The global namespace is now searched before packages, which is the correct behavior.

A regression in string operations via the + operator is also reversed.

v1.1.1

01 Nov 02:30
bbb9038
Compare
Choose a tag to compare

Bug fixes

  • Assignment to indexing expression with dot expressions inside no longer cause a compilation error.
  • The no_module and internals features now work together without a compilation error.
  • String literal operations (such as "hello" + ", world") now optimizes correctly.

v1.1.0

11 Oct 09:45
3c40c30
Compare
Choose a tag to compare

Version 1.1.0 released to crates.io.

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 API

  • Engine::consume_XXX methods are renamed to Engine::run_XXX to make meanings clearer. The consume_XXX API is deprecated.
  • Engine::register_type_XXX are now available even under no_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 Values

  • Dynamic::as_string and Dynamic::as_immutable_string are deprecated and replaced by into_string and into_immutable_string respectively.
  • Added a number of constants to Dynamic.
  • Added a number of constants and fromXXX constant methods to Dynamic.
  • Added sin, cos and tan for Decimal values.

Decimal Values

  • parse_float(), PI() and E() now defer to Decimal under no_float if decimal is turned on.
  • Added log10() for Decimal.
  • ln for Decimal is now checked and won't panic.

String Values

  • SmartString now uses LazyCompact instead of Compact to minimize allocations.
  • Added pop for strings.
  • Added ImmutableString::ptr_eq to test if two strings point to the same allocation.
  • The serde feature of SmartString is turned on under metadata to make Map serializable.

Scope API

  • Scope::set_value now takes anything that implements Into<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 for Stmt::Return.
  • Stmt::Break and Stmt::Continue are merged into Stmt::BreakLoop via an option flag.
  • StaticVec is changed to keep three items inline instead of four.

v1.0.6

28 Sep 08:50
8c15e2b
Compare
Choose a tag to compare

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 and AccessMode are exported under the internals feature.

v1.0.5

19 Sep 14:30
4ed757d
Compare
Choose a tag to compare

This is a bug fix version with the following fixes:

  • FloatWrapper is no longer erroneously exported under no_float+internals.
  • The sign function now works properly for float values that are NaN.

v1.0.4

03 Sep 02:16
5cc1fd1
Compare
Choose a tag to compare

Fixed bug with catch variable used in catch block.

This release fixes a bug in 1.0.3 which has been yanked.

v1.0.2

17 Aug 07:49
e4c2637
Compare
Choose a tag to compare

Fixed bug in method call followed by an array indexing.

v1.0.1

06 Aug 07:29
b3a1c12
Compare
Choose a tag to compare

Bug fixes

  • Fixed bug in using indexing/dotting inside index bracket.
  • while and loop statements are no longer considered pure (since a loop can go on forever and this is a side effect).

v1.0.0

07 Jul 01:03
51a9c55
Compare
Choose a tag to compare

The official version 1.0.

Almost the same version as 0.20.3 but with deprecated API's removed.

Version 1.0.0 released to crates.io.

Bug fixes

  • Fixed infinite loop in certain script optimizations.
  • Building for no-std no longer requires patching smartstring.
  • Parsing a lone return or throw without a semicolon at the end of a block no longer raises an error.

Breaking changes

  • All deprecated API's (e.g. the RegisterFn and RegisterResultFn traits) are removed.
  • Module::set_id is split into Module::set_id and Module::clear_id pair.
  • begin, end, each, then, unless are no longer reserved keywords.

Enhancements

  • New methods is_odd, is_even for integers, and is_zero for all numbers.
  • From<BTreeSet> and From<HashSet> are added for Dynamic, which create object maps with () values.