## v0.9.9 - Minimal Luau updated to 0.629 - Fixed bug when attempting to reset or resume already running coroutines (#416). - Added `RegistryKey::id()` method to get the underlying Lua registry key id. ## v0.9.8 - Fixed serializing same table multiple times (#408) - Use `mlua-sys` v0.6 (to support Luau 0.624+) - Fixed cross compilation of windows dlls from unix (#394) ## v0.9.7 - Implemented `IntoLua` for `RegistryKey` - Mark `__idiv` metamethod as available for luau - Added `Function::deep_clone()` method (Luau) - Added `SerializeOptions::detect_serde_json_arbitrary_precision` option - Added `Lua::create_buffer()` method (Luau) - Support serializing buffer type as a byte slice (Luau) - Perf: Implemented `push_into_stack`/`from_stack` for `Option` - Added `Lua::create_ser_any_userdata()` method ## v0.9.6 - Added `to_pointer` function to `Function`/`Table`/`Thread` - Implemented `IntoLua` for `&Value` - Implemented `FromLua` for `RegistryKey` - Faster (~5%) table array traversal during serialization - Some performance improvements for bool/int types ## v0.9.5 - Minimal Luau updated to 0.609 - Luau max stack size increased to 1M (from 100K) - Implemented `IntoLua` for refs to `String`/`Table`/`Function`/`AnyUserData`/`Thread` + `RegistryKey` - Implemented `IntoLua` and `FromLua` for `OwnedThread`/`OwnedString` - Fixed `FromLua` derive proc macro to cover more cases ## v0.9.4 - Fixed loading all-in-one modules under mixed states (eg. main state and coroutines) ## v0.9.3 - WebAssembly support (`wasm32-unknown-emscripten` target) - Performance improvements (faster Lua function calls for lua51/jit/luau) ## v0.9.2 - Added binary modules support to Luau - Added Luau package module (uses `StdLib::PACKAGE`) with loaders (follows lua5.1 interface) - Added support of Luau 0.601+ buffer type (represented as userdata in Rust) - LuaJIT `cdata` type is also represented as userdata in Rust (instead of panic) - Vendored LuaJIT switched to rolling vanilla (from openresty) - Added `Table::for_each` method for fast table pairs traversal (faster than `pairs`) - Performance improvements around table traversal (and faster serialization) - Bug fixes and improvements ## v0.9.1 - impl Default for Lua - impl IntoLuaMulti for `std::result::Result<(), E>` - Fix using wrong userdata index after processing Variadic args (#311) ## v0.9.0 Changes since v0.9.0-rc.3 - Improved non-static (scoped) userdata support - Added `Scope::create_any_userdata()` method - Added `Lua::set_vector_metatable()` method (`unstable` feature flag) - Added `OwnedThread` type (`unstable` feature flag) - Minimal Luau updated to 0.590 - Added new option `sort_keys` to `DeserializeOptions` (`Lua::from_value()` method) - Changed `Table::raw_len()` output type to `usize` - Helper functions for `Value` (eg: `Value::as_number()`/`Value::as_string`/etc) - Performance improvements ## v0.9.0-rc.3 - Minimal Luau updated to 0.588 ## v0.9.0-rc.2 - Added `#[derive(FromLua)]` macro to opt-in into `FromLua where T: 'static + Clone` (userdata type). - Support vendored module mode for windows (raw-dylib linking, Rust 1.71+) - `module` and `vendored` features are now mutually exclusive - Use `C-unwind` ABI (Rust 1.71+) - Changed `AsChunk` trait to support capturing wrapped Lua types ## v0.9.0-rc.1 - `UserDataMethods::add_async_method()` takes `&T` instead of cloning `T` - Implemented `PartialEq<[T]>` for tables - Added Luau 4-dimensional vectors support (`luau-vector4` feature) - `Table::sequence_values()` iterator no longer uses any metamethods (`Table::raw_sequence_values()` is deprecated) - Added `Table:is_empty()` function that checks both hash and array parts - Refactored Debug interface - Re-exported `ffi` (`mlua-sys`) crate for easier writing of unsafe code - Refactored Lua 5.4 warnings interface - Take `&str` as function name in `TableExt` and `AnyUserDataExt` traits - Added module attribule `skip_memory_check` to improve performance - Added `AnyUserData::wrap()` to provide more easy way of creating _any_ userdata in Lua ## v0.9.0-beta.3 - Added `OwnedAnyUserData::take()` - Switch to `DeserializeOwned` - Overwrite error context when called multiple times - New feature flag `luau-jit` to enable (experimental) Luau codegen backend - Set `__name` field in userdata metatable - Added `Value::to_string()` method similar to `luaL_tolstring` - Lua 5.4.6 - Application data container now allows to mutably and immutably borrow different types at the same time - Performance optimizations - Support getting and setting environment for Lua functions. - Added `UserDataFields::add_field()` method to add static fields to UserData Breaking changes: - Require environment to be a `Table` instead of `Value` in Chunks. - `AsChunk::env()` renamed to `AsChunk::environment()` ## v0.9.0-beta.2 New features: - Added `Thread::set_hook()` function to set hook on threads - Added pretty print to the Debug formatting to Lua `Value` and `Table` - ffi layer moved to `mlua-sys` crate - Added OwnedString (unstable) Breaking changes: - Refactor `HookTriggers` (make it const) ## v0.9.0-beta.1 New features: - Owned Lua types (unstable feature flag) - New functions `Function::wrap`/`Function::wrap_mut`/`Function::wrap_async` - `Lua::register_userdata_type()` to register a custom userdata types (without requiring `UserData` trait) - `Lua::create_any_userdata()` - Added `create_userdata_ref`/`create_userdata_ref_mut` for scopes - Added `AnyUserDataExt` trait with auxiliary functions for `AnyUserData` - Added `UserDataRef` and `UserDataRefMut` type wrapped that implement `FromLua` - Improved error handling: * Improved error reporting when calling Rust functions from Lua. * Added `Error::BadArgument` to help identify bad argument position or name * Added `ErrorContext` extension trait to attach additional context to `Error` Breaking changes: - Refactored `AsChunk` trait - `ToLua`/`ToLuaMulti` renamed to `IntoLua`/`IntoLuaMulti` - Renamed `to_lua_err` to `into_lua_err` - Removed `FromLua` impl for `T: UserData+Clone` - Removed `Lua::async_scope` - Added `&Lua` arg to Luau interrupt callback Other: - Better Debug for String - Allow deserializing values from serializable UserData using `Lua::from_value()` method - Added `Table::clear()` method - Added `Error::downcast_ref()` method - Support setting memory limit for Lua 5.1/JIT/Luau - Support setting module name in `#[lua_module(name = "...")]` macro - Minor fixes and improvements ## v0.8.10 - Update to Luau 0.590 (luau0-src to 0.7.x) - Fix loading luau code starting with \t - Pin lua-src and luajit-src versions ## v0.8.9 - Update minimal (vendored) Lua 5.4 to 5.4.6 - Use `lua_closethread` instead of `lua_resetthread` in vendored mode (Lua 5.4.6) - Allow deserializing Lua null into unit (`()`) or unit struct. ## v0.8.8 - Fix potential deadlock when trying to reuse dropped registry keys. - Optimize userdata methods call when __index and fields_getters are nil ## v0.8.7 - Minimum Luau updated to 0.555 (`LUAI_MAXCSTACK` limit increased to 100000) - `_VERSION` in Luau now includes version number - Fixed lifetime of `DebugNames` in `Debug::names()` and `DebugSource` in `Debug::source()` - Fixed subtraction overflow when calculating index for `MultiValue::get()` ## v0.8.6 - Fixed bug when recycled Registry slot can be set to Nil ## v0.8.5 - Fixed potential unsoundness when using `Layout::from_size_align_unchecked` and Rust 1.65+ - Performance optimizations around string and table creation in standalone mode - Added fast track path to Table `get`/`set`/`len` methods without metatable - Added new methods `push`/`pop`/`raw_push`/`raw_pop` to Table - Fix getting caller information from `Lua::load` - Better checks and tests when trying to modify a Luau readonly table ## v0.8.4 - Minimal Luau updated to 0.548 ## v0.8.3 - Close to-be-closed variables for Lua 5.4 when using call_async functions (#192) - Fixed Lua assertion when inspecting another thread stack. (#195) - Use more reliable way to create LuaJIT VM (which can fail if use Rust allocator on non-x86 platforms) ## v0.8.2 - Performance optimizations in handling UserData - Minimal Luau updated to 0.536 - Fixed bug in `Function::bind` when passing empty binds and no arguments (#189) ## v0.8.1 - Added `Lua::create_proxy` for accessing to UserData static fields and functions without instance - Added `Table::to_pointer()` and `String::to_pointer()` functions - Bugfixes and improvements (#176 #179) ## v0.8.0 Changes since 0.7.4 - Roblox Luau support - Removed C glue - Added async support to `__index` and `__newindex` metamethods - Added `Function::info()` to get information about functions (#149). - Added `parking_lot` dependency under feature flag (for `UserData`) - `Hash` implementation for Lua String - Added `Value::to_pointer()` function - Performance improvements Breaking changes: - Refactored `AsChunk` trait (added implementation for `Path` and `PathBuf`). ## v0.8.0-beta.5 - Lua sources no longer needed to build modules - Added `__iter` metamethod for Luau - Added `Value::to_pointer()` function - Added `Function::coverage` for Luau to obtain coverage report - Bugfixes and improvements (#153 #161 #168) ## v0.8.0-beta.4 - Removed `&Lua` from `Lua::set_interrupt` as it's not safe (introduced in v0.8.0-beta.3) - Enabled `Lua::gc_inc` for Luau - Luau `debug` module marked as safe (enabled by default) - Implemented `Hash` for Lua String - Support mode options in `collectgarbage` for Luau - Added ability to set global Luau compiler (used for loading all chunks). - Refactored `AsChunk` trait (breaking changes). `AsChunk` now implemented for `Path` and `PathBuf` to load lua files from fs. - Added `parking_lot` dependency and feature flag (for `UserData`) - Added `Function::info()` to get information about functions (#149). - Bugfixes and improvements (#104 #142) ## v0.8.0-beta.3 - Luau vector constructor - Luau sandboxing support - Luau interrupts (yieldable) - More Luau compiler options (mutable globals) - Other performance improvements ## v0.8.0-beta.2 - Luau vector datatype support - Luau readonly table attribute - Other Luau improvements ## v0.8.0-beta.1 - Roblox Luau support - Refactored ffi module. C glue is no longer required - Added async support to `__index` and `__newindex` metamethods ## v0.7.4 - Improved `Lua::create_registry_value` to reuse previously expired registry keys. No need to call `Lua::expire_registry_values` when creating/dropping registry values. - Added `Lua::replace_registry_value` to change value of an existing Registry Key - Async calls optimization ## v0.7.3 - Fixed cross-compilation issue (introduced in 84a174c) ## v0.7.2 - Allow `pkg-config` to omit include paths if they equals to standard (#114). - Various bugfixes (eg. #121) ## v0.7.1 - Fixed traceback generation for errors (#112) - `Lua::into_static/from_static` methods have been removed from the docs and are discouraged for use ## v0.7.0 - New "application data" api to store arbitrary objects inside Lua - New feature flag `luajit52` to build/support LuaJIT with partial compatibility with Lua 5.2 - Added async meta methods for all Lua (except 5.1) - Added `AnyUserData::take()` to take UserData objects from Lua - Added `set_nth_user_value`/`get_nth_user_value` to `AnyUserData` for all Lua versions - Added `set_named_user_value`/`get_named_user_value` to `AnyUserData` for all Lua versions - Added `Lua::inspect_stack()` to get information about the interpreter runtime stack - Added `set_warning_function`/`remove_warning_function`/`warning` functions to `Lua` for 5.4 - Added `TableExt::call()` to call tables with `__call` metamethod as functions - Added `Lua::unload()` to unload modules - `ToLua` implementation for arrays changed to const generics - Added thread (coroutine) cache for async execution (disabled by default and works for Lua 5.4/JIT) - LuaOptions and (De)SerializeOptions marked as const - Fixed recursive tables serialization when using `serde::Serialize` for Lua Tables - Improved errors reporting. Now source included to `fmt::Display` implementation for `Error::CallbackError` - Major performance improvements ## v0.6.6 - Fixed calculating `LUA_REGISTRYINDEX` when cross-compiling for lua51/jit (#82) - Updated documentation & examples ## v0.6.5 - Fixed bug when polling async futures (#77) - Refactor Waker handling in async code (+10% performance gain when calling async functions) - Added `Location::caller()` information to `Lua::load()` if chunk's name is None (Rust 1.46+) - Added serialization of i128/u128 types (serde) ## v0.6.4 - Performance optimizations - Fixed table traversal used in recursion detection in deserializer ## v0.6.3 - Disabled catching Rust panics in userdata finalizers on drop. It also has positive performance impact. - Added `Debug::event()` to the hook's Debug structure - Simplified interface of `hook::HookTriggers` - Added finalizer to `ExtraData` in module mode. This helps avoiding memory leak on closing state when Lua unloads modules and frees memory. - Added `DeserializeOptions` struct to control deserializer behavior (`from_value_with` function). ## v0.6.2 - New functionality: `Lua::load_from_function()` and `Lua::create_c_function()` - Many optimizations in callbacks/userdata creation and methods execution ## v0.6.1 - Update `chunk!` documentation (stable Rust limitations) - Fixed Lua sequence table conversion to HashSet/BTreeSet - `once_cell` dependency lowered to 1.0 ## v0.6.0 Changes since 0.5.4 - New `UserDataFields` API - Full access to `UserData` metatables with support of setting arbitrary fields. - Implement `UserData` for `Rc>`/`Arc>`/`Arc>` where `T: UserData`. - Added `SerializeOptions` to to change default Lua serializer behaviour (eg. `nil/null/array` serialization) - Added `LuaOptions` to customize Lua/Rust behaviour (currently panic handling) - Added `ToLua`/`FromLua` implementation for `Box` and `Box<[T]>`. - Added `Thread::reset()` for luajit/lua54 to recycle threads (coroutines) with attaching a new function. - Added `chunk!` macro support to load chunks of Lua code using the Rust tokenizer and optionally capturing Rust variables. - Improved errors reporting (`Error`'s `__tostring` method formats full stacktraces). This is useful in a module mode. - Added `String::to_string_lossy` - Various bugfixes and improvements Breaking changes: - Errors are always `Send + Sync` to be compatible with the anyhow crate. - Removed `Result` from `LuaSerdeExt::null()` and `LuaSerdeExt::array_metatable()` (never fails) - Removed `Result` from `Function::dump()` (never fails) - Removed `AnyUserData::has_metamethod()` (in favour of full access to metatables) ## v0.6.0-beta.3 - Errors are always `Send + Sync` to be compatible with anyhow crate - Implement `UserData` for `Rc`/`Arc`/`Arc` - Added `__ipairs` metamethod for Lua 5.2 - Added `String::to_string_lossy` - Various bugfixes and improvements ## v0.6.0-beta.2 - [**Breaking**] Removed `AnyUserData::has_metamethod()` - Added `Thread::reset()` for luajit/lua54 to recycle threads. It's possible to attach a new function to a thread (coroutine). - Added `chunk!` macro support to load chunks of Lua code using the Rust tokenizer and optinally capturing Rust variables. - Improved error reporting (`Error`'s `__tostring` method formats full stacktraces). This is useful in the module mode. ## v0.6.0-beta.1 - New `UserDataFields` API - Allow to define arbitrary MetaMethods - `MetaMethods::name()` is public - Do not trigger longjmp in Rust to prevent unwinding across FFI boundaries. See https://github.com/rust-lang/rust/issues/83541 - Added `SerializeOptions` to to change default Lua serializer behaviour (eg. nil/null/array serialization) - [**Breaking**] Removed `Result` from `LuaSerdeExt::null()` and `LuaSerdeExt::array_metatable()` (never fails) - [**Breaking**] Removed `Result` from `Function::dump()` (never fails) - `ToLua`/`FromLua` implementation for `Box` and `Box<[T]>` - [**Breaking**] Added `LuaOptions` to customize Lua/Rust behaviour (currently panic handling) - Various bugfixes and performance improvements ## v0.5.4 - Build script improvements - Improvements in panic handling (resume panic on value popping) - Fixed bug serializing 3rd party userdata (causes segfault) - Make error::Error non exhaustive ## v0.5.3 - Fixed bug when returning nil-prefixed multi values from async function (+ test) - Performance optimisation for async callbacks (polling) ## v0.5.2 - Some performance optimisations (callbacks) - `ToLua` implementation for `Cow` and `Cow` - Fixed bug with `Scope` destruction of partially polled futures ## v0.5.1 - Support cross compilation that should work well for vendored builds (including LuaJIT with some restrictions) - Fix numeric types conversion for 32bit Lua - Update tokio to 1.0 for async examples ## v0.5.0 - Serde support under `serialize` feature flag. - Re-export `mlua_derive`. - impl `ToLua` and `FromLua` for `HashSet` and `BTreeSet` ## v0.4.2 - Added `Function::dump()` to dump lua function to a binary chunk - Added `ChunkMode` enum to mark chunks as text or binary - Updated `set_memory_limit` doc ## v0.4.0 - Lua 5.4 support with `MetaMethod::Close`. - `lua53` feature is disabled by default. Now preferred Lua version have to be chosen explicitly. - Provide safety guaraness for Lua state, which means that potenially unsafe operations, like loading C modules (using `require` or `package.loadlib`) are disabled. Equalient for the previous `Lua::new()` function is `Lua::unsafe_new()`. - New `send` feature to require `Send`. - New `module` feature, that disables linking to Lua Core Libraries. Required for modules. - Don't allow `'callback` outlive `'lua` in `Lua::create_function()` to fix [the unsoundness](tests/compile/static_callback_args.rs). - Added `Lua::into_static()` to make `'static` Lua state. This is useful to spawn async Lua threads that requires `'static`. - New function `Lua::set_memory_limit()` (similar to `rlua`) to enable memory restrictions in Lua VM (requires Lua >= 5.2). - `Scope`, temporary removed in v0.3, is back with async support. - Removed deprecated `Table::call()` function. - Added hooks support (backported from rlua 0.17). - New `AnyUserData::has_metamethod()` function. - LuaJIT 2.0.5 (the latest stable) support. - Various bug fixes and improvements.