All Versions
Latest Version
Avg Release Cycle
54 days
Latest Release

Changelog History
Page 1

  • v1.4.0 Changes

    This version adds support for integer ranges via the .. and ..= operators.

    🆕 New features

    • Added support for integer ranges via the .. and ..= operators.
  • 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 deserializing Option.

    🆕 New features

    • 👍 BLOB (essentially a byte array) is added as a supported primitive value type parallel to arrays.
    • 🆕 New options for Engine which allows disabling if-expressions, switch-expressions, statement expressions, anonymous functions and/or looping (i.e. while, loop, do and for 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 via Engine::set_strict_variables) to throw parse errors on undefined variable usage. Two new parse error variants, ParseErrorType::VariableNotFound and ParseErrorType::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 and into_typed_array for Dynamic.
    • Added FnPtr::call and FnPtr::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 to Expr.

    🗄 Deprecated and Gated API's

    • 🗄 NativeCallContext::new is deprecated because it is simpler to call a function pointer via FnPtr::call.
    • AST::merge_filtered and AST::combine_filtered are no longer exported under no_function.
    • AST::new and AST::new_with_source are moved under internals.
    • 🗄 FnPtr::call_dynamic is deprecated in favor of FnPtr::call_raw.
  • v1.2.1 Changes

    🐛 Bug fixes

    • Array methods (such as map) taking a closure with captures as argument now works properly.
  • v1.2.0 Changes

    🐛 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 Changes

    🐛 Bug fixes

    • 🖨 0.0 now prints correctly (used to print 0e0).
    • 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 and internals 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 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.


    • ➕ 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 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 and AccessMode are exported under the internals feature.
  • v1.0.5 Changes

    🐛 Bug 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 Changes

    • 🛠 Fixed bug with catch variable used in catch block.