- impl Default for Lua
- impl IntoLuaMulti for
std::result::Result<(), E> - Fix using wrong userdata index after processing Variadic args (#311)
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 (unstablefeature flag) - Added
OwnedThreadtype (unstablefeature flag) - Minimal Luau updated to 0.590
- Added new option
sort_keystoDeserializeOptions(Lua::from_value()method) - Changed
Table::raw_len()output type tousize - Helper functions for
Value(eg:Value::as_number()/Value::as_string/etc) - Performance improvements
- Minimal Luau updated to 0.588
- Added
#[derive(FromLua)]macro to opt-in intoFromLua<T> where T: 'static + Clone(userdata type). - Support vendored module mode for windows (raw-dylib linking, Rust 1.71+)
moduleandvendoredfeatures are now mutually exclusive- Use
C-unwindABI (Rust 1.71+) - Changed
AsChunktrait to support capturing wrapped Lua types
UserDataMethods::add_async_method()takes&Tinstead of cloningT- Implemented
PartialEq<[T]>for tables - Added Luau 4-dimensional vectors support (
luau-vector4feature) 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
&stras function name inTableExtandAnyUserDataExttraits - Added module attribule
skip_memory_checkto improve performance - Added
AnyUserData::wrap()to provide more easy way of creating any userdata in Lua
- Added
OwnedAnyUserData::take() - Switch to
DeserializeOwned - Overwrite error context when called multiple times
- New feature flag
luau-jitto enable (experimental) Luau codegen backend - Set
__namefield in userdata metatable - Added
Value::to_string()method similar toluaL_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
Tableinstead ofValuein Chunks. AsChunk::env()renamed toAsChunk::environment()
New features:
- Added
Thread::set_hook()function to set hook on threads - Added pretty print to the Debug formatting to Lua
ValueandTable - ffi layer moved to
mlua-syscrate - Added OwnedString (unstable)
Breaking changes:
- Refactor
HookTriggers(make it const)
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 requiringUserDatatrait)Lua::create_any_userdata()- Added
create_userdata_ref/create_userdata_ref_mutfor scopes - Added
AnyUserDataExttrait with auxiliary functions forAnyUserData - Added
UserDataRefandUserDataRefMuttype wrapped that implementFromLua - Improved error handling:
- Improved error reporting when calling Rust functions from Lua.
- Added
Error::BadArgumentto help identify bad argument position or name - Added
ErrorContextextension trait to attach additional context toError
Breaking changes:
- Refactored
AsChunktrait ToLua/ToLuaMultirenamed toIntoLua/IntoLuaMulti- Renamed
to_lua_errtointo_lua_err - Removed
FromLuaimpl forT: UserData+Clone - Removed
Lua::async_scope - Added
&Luaarg 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
- 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
- Update minimal (vendored) Lua 5.4 to 5.4.6
- Use
lua_closethreadinstead oflua_resetthreadin vendored mode (Lua 5.4.6) - Allow deserializing Lua null into unit (
()) or unit struct.
- Fix potential deadlock when trying to reuse dropped registry keys.
- Optimize userdata methods call when __index and fields_getters are nil
- Minimum Luau updated to 0.555 (
LUAI_MAXCSTACKlimit increased to 100000) _VERSIONin Luau now includes version number- Fixed lifetime of
DebugNamesinDebug::names()andDebugSourceinDebug::source() - Fixed subtraction overflow when calculating index for
MultiValue::get()
- Fixed bug when recycled Registry slot can be set to Nil
- Fixed potential unsoundness when using
Layout::from_size_align_uncheckedand Rust 1.65+ - Performance optimizations around string and table creation in standalone mode
- Added fast track path to Table
get/set/lenmethods without metatable - Added new methods
push/pop/raw_push/raw_popto Table - Fix getting caller information from
Lua::load - Better checks and tests when trying to modify a Luau readonly table
- Minimal Luau updated to 0.548
- 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)
- Performance optimizations in handling UserData
- Minimal Luau updated to 0.536
- Fixed bug in
Function::bindwhen passing empty binds and no arguments (#189)
- Added
Lua::create_proxyfor accessing to UserData static fields and functions without instance - Added
Table::to_pointer()andString::to_pointer()functions - Bugfixes and improvements (#176 #179)
Changes since 0.7.4
- Roblox Luau support
- Removed C glue
- Added async support to
__indexand__newindexmetamethods - Added
Function::info()to get information about functions (#149). - Added
parking_lotdependency under feature flag (forUserData) Hashimplementation for Lua String- Added
Value::to_pointer()function - Performance improvements
Breaking changes:
- Refactored
AsChunktrait (added implementation forPathandPathBuf).
- Lua sources no longer needed to build modules
- Added
__itermetamethod for Luau - Added
Value::to_pointer()function - Added
Function::coveragefor Luau to obtain coverage report - Bugfixes and improvements (#153 #161 #168)
- Removed
&LuafromLua::set_interruptas it's not safe (introduced in v0.8.0-beta.3) - Enabled
Lua::gc_incfor Luau - Luau
debugmodule marked as safe (enabled by default) - Implemented
Hashfor Lua String - Support mode options in
collectgarbagefor Luau - Added ability to set global Luau compiler (used for loading all chunks).
- Refactored
AsChunktrait (breaking changes).AsChunknow implemented forPathandPathBufto load lua files from fs. - Added
parking_lotdependency and feature flag (forUserData) - Added
Function::info()to get information about functions (#149). - Bugfixes and improvements (#104 #142)
- Luau vector constructor
- Luau sandboxing support
- Luau interrupts (yieldable)
- More Luau compiler options (mutable globals)
- Other performance improvements
- Luau vector datatype support
- Luau readonly table attribute
- Other Luau improvements
- Roblox Luau support
- Refactored ffi module. C glue is no longer required
- Added async support to
__indexand__newindexmetamethods
- Improved
Lua::create_registry_valueto reuse previously expired registry keys. No need to callLua::expire_registry_valueswhen creating/dropping registry values. - Added
Lua::replace_registry_valueto change value of an existing Registry Key - Async calls optimization
- Fixed cross-compilation issue (introduced in 84a174c)
- Allow
pkg-configto omit include paths if they equals to standard (#114). - Various bugfixes (eg. #121)
- Fixed traceback generation for errors (#112)
Lua::into_static/from_staticmethods have been removed from the docs and are discouraged for use
- New "application data" api to store arbitrary objects inside Lua
- New feature flag
luajit52to 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_valuetoAnyUserDatafor all Lua versions - Added
set_named_user_value/get_named_user_valuetoAnyUserDatafor all Lua versions - Added
Lua::inspect_stack()to get information about the interpreter runtime stack - Added
set_warning_function/remove_warning_function/warningfunctions toLuafor 5.4 - Added
TableExt::call()to call tables with__callmetamethod as functions - Added
Lua::unload()to unload modules ToLuaimplementation 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::Serializefor Lua Tables - Improved errors reporting. Now source included to
fmt::Displayimplementation forError::CallbackError - Major performance improvements
- Fixed calculating
LUA_REGISTRYINDEXwhen cross-compiling for lua51/jit (#82) - Updated documentation & examples
- Fixed bug when polling async futures (#77)
- Refactor Waker handling in async code (+10% performance gain when calling async functions)
- Added
Location::caller()information toLua::load()if chunk's name is None (Rust 1.46+) - Added serialization of i128/u128 types (serde)
- Performance optimizations
- Fixed table traversal used in recursion detection in deserializer
- 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
ExtraDatain module mode. This helps avoiding memory leak on closing state when Lua unloads modules and frees memory. - Added
DeserializeOptionsstruct to control deserializer behavior (from_value_withfunction).
- New functionality:
Lua::load_from_function()andLua::create_c_function() - Many optimizations in callbacks/userdata creation and methods execution
- Update
chunk!documentation (stable Rust limitations) - Fixed Lua sequence table conversion to HashSet/BTreeSet
once_celldependency lowered to 1.0
Changes since 0.5.4
- New
UserDataFieldsAPI - Full access to
UserDatametatables with support of setting arbitrary fields. - Implement
UserDataforRc<RefCell<T>>/Arc<Mutex<T>>/Arc<RwLock<T>>whereT: UserData. - Added
SerializeOptionsto to change default Lua serializer behaviour (eg.nil/null/arrayserialization) - Added
LuaOptionsto customize Lua/Rust behaviour (currently panic handling) - Added
ToLua/FromLuaimplementation forBox<str>andBox<[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__tostringmethod 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 + Syncto be compatible with the anyhow crate. - Removed
ResultfromLuaSerdeExt::null()andLuaSerdeExt::array_metatable()(never fails) - Removed
ResultfromFunction::dump()(never fails) - Removed
AnyUserData::has_metamethod()(in favour of full access to metatables)
- Errors are always
Send + Syncto be compatible with anyhow crate - Implement
UserDataforRc<RefCell>/Arc<Mutex>/Arc<RwLock> - Added
__ipairsmetamethod for Lua 5.2 - Added
String::to_string_lossy - Various bugfixes and improvements
- [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__tostringmethod formats full stacktraces). This is useful in the module mode.
- New
UserDataFieldsAPI - Allow to define arbitrary MetaMethods
MetaMethods::name()is public- Do not trigger longjmp in Rust to prevent unwinding across FFI boundaries. See rust-lang/rust#83541
- Added
SerializeOptionsto to change default Lua serializer behaviour (eg. nil/null/array serialization) - [Breaking] Removed
ResultfromLuaSerdeExt::null()andLuaSerdeExt::array_metatable()(never fails) - [Breaking] Removed
ResultfromFunction::dump()(never fails) ToLua/FromLuaimplementation forBox<str>andBox<[T]>- [Breaking] Added
LuaOptionsto customize Lua/Rust behaviour (currently panic handling) - Various bugfixes and performance improvements
- 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
- Fixed bug when returning nil-prefixed multi values from async function (+ test)
- Performance optimisation for async callbacks (polling)
- Some performance optimisations (callbacks)
ToLuaimplementation forCow<str>andCow<CStr>- Fixed bug with
Scopedestruction of partially polled futures
- 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
- Serde support under
serializefeature flag. - Re-export
mlua_derive. - impl
ToLuaandFromLuaforHashSetandBTreeSet
- Added
Function::dump()to dump lua function to a binary chunk - Added
ChunkModeenum to mark chunks as text or binary - Updated
set_memory_limitdoc
- Lua 5.4 support with
MetaMethod::Close. lua53feature 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
requireorpackage.loadlib) are disabled. Equalient for the previousLua::new()function isLua::unsafe_new(). - New
sendfeature to requireSend. - New
modulefeature, that disables linking to Lua Core Libraries. Required for modules. - Don't allow
'callbackoutlive'luainLua::create_function()to fix the unsoundness. - Added
Lua::into_static()to make'staticLua state. This is useful to spawn async Lua threads that requires'static. - New function
Lua::set_memory_limit()(similar torlua) 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.