Releases: luau-lang/luau
0.635
What's Changed?
- Bugfixes in the new solver
- Store
definitionLocation
in ClassType by @JohnnyMorganz in #1313 - Optimizations for UnionFind by @birds3345 in #1334
New Solver
- Equality graphs(E-Graphs) data structures were added
- Refactored even more instances of "type family" with "type function"
table.insert
no longer spuriously warns while selecting an overload for reasonable arguments.- Add time tracing for the new solver
- Miscellaneous fixes to unit tests
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Alexander McCord amccord@roblox.com
Co-authored-by: Jeremy Yoo jyoo@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
Full Changelog: 0.634...0.635
0.634
What's Changed?
- Performance improvement in the old solver
- Bugfixes in the new solver
- Keep commentLocations on SourceModule for definition files by @JohnnyMorganz in #1314
- Fix incorrect comment in Bytecode.h by @mttsner in #1315
Old Solver
- Mark types that do not need instantiation when being exported to
prevent unnecessary work from being done
New Solver
- Index-out-of-bounds bug fix in the resolution resolver
- Subtyping reasonings are merged only if all failed
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
New Contributors
Full Changelog: 0.633...0.634
0.633
What's Changed?
- Mostly stability and bugfixes with the new solver.
New Solver
- Typechecking with the new solver should respect the no-check hot comment.
- Record type alias locations and property locations of table assignments
- Maintain location information for exported table types
- Stability fixes for normalization
- Report internal constraint solver errors.
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Alexander McCord amccord@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
Full Changelog: 0.632...0.633
0.632
What's Changed?
- Fix #1137 by appropriately retaining additional metadata from definition files throughout the type system.
- Improve Frontend for LSPs by appropriately allowing the cancellation of typechecking while running its destructor.
New Solver
- Added support for the
rawget
type function. - Reduced overall static memory usage of builtin type functions.
- Fixed a crash where visitors could mutate a union or intersection type and fail to invalidate iteration over them in doing so.
- Revised autocomplete functionality to not rely on a separate run of the type solver when using the new solver.
- Implemented a more relaxed semantic rule for casting.
- Fixed some smaller crashes in the new solver.
Native Code Generation
- Add additional codegen specialization for
math.sign
- Cleaned up a large number of outstanding fflags in the code.
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Alexander McCord amccord@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: James McNellis jmcnellis@roblox.com
Co-authored-by: Jeremy Yoo jyoo@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
Full Changelog: 0.631...0.632
0.631
What's new
- Added lint warning for using redundant
@native
attributes on functions inside a--!native
module - Improved typechecking speed in old solver for modules with large types
New Solver
- Fixed the length type function sealing the table prematurely
- Fixed crashes caused by general table indexing expressions
VM
- Added support for a specialized 3-argument fast-call instruction to improve performance of
vector
constructor,buffer
writes and a fewbit32
methods
Full Changelog: 0.630...0.631
0.630
What's new
- A bug in exception handling in GCC(11/12/13) on MacOS prevents our test suite from running.
- Parser now supports leading
|
or&
when declaringUnion
andIntersection
types (#1286) - We now support parsing of attributes on functions as described in the rfc
- With this change, expressions such as
local x = @native function(x) return x+1 end
andf(@native function(x) return x+1 end)
are now
valid.
- With this change, expressions such as
- Added support for
@native
attribute - we can now force native compilation of individual functions if the@native
attribute is specified before thefunction
keyword (works for lambdas too).
New Solver
- Many fixes in the new solver for crashes and instability
- Refinements now use simplification and not normalization in a specific case of two tables
- Assume that compound assignments do not change the type of the left-side operand
- Fix error that prevented Class Methods from being overloaded
VM
- Updated description of Garbage Collector invariant
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Alexander McCord amccord@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Aviral Goel agoel@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
Full Changelog: 0.629...0.630
0.629
What's Changed
- Fix edge case in 'findBindingAtPosition' when looking up global binding at start of file by @JohnnyMorganz in #1254
- implement leading bar and ampersand in types by @jackdotink in #1286
- Fix incorrect comment in lgc.h by @zeux in #1288
- tests: Adjust conformance tests to account for array invariant by @zeux in #1289
- Implemented parsing logic for attributes
- Added
lua_setuserdatametatable
andlua_getuserdatametatable
C API methods for a faster userdata metatable fetch compared toluaL_getmetatable
. Note that metatable reference has to still be pinned in memory!
New Solver
- Further improvement to the assignment inference logic
- Fix many bugs surrounding constraint dispatch order
Native Codegen
- Add IR lowering hooks for custom host userdata types
- Add IR to create new tagged userdata objects
- Remove outdated NativeState
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Alexander McCord amccord@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Aviral Goel agoel@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
New Contributors
- @jackdotink made their first contribution in #1286
Full Changelog: 0.628...0.629
0.628
What's new?
- Remove a case of unsound
table.move
optimization - Add Luau stack slot reservations that were missing in REPL (fixes #1273)
New Type Solver
- Assignments have been completely reworked to fix a case of cyclic constraint dependency
- When indexing, if the fresh type's upper bound already contains a compatible indexer, do not add another upper bound
- Distribute type arguments over all type families sans
eq
,keyof
,rawkeyof
, and other internal type families - Fix a case where
buffers
component weren't read in two places (fixes #1267) - Fix a case where things that constitutes a strong ref were slightly incorrect
- Fix a case where constraint dependencies weren't setup wrt
for ... in
statement
Native Codegen
- Fix an optimization that splits TValue store only when its value and its tag are compatible
- Implement a system to plug additional type information for custom host userdata types
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Alexander McCord amccord@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
Full Changelog: 0.627...0.628
0.627
What's new?
- Fix typo in a comment by @birds3345 in #1255
- add cmake folder to .gitignore by @birds3345 in #1246
New Type Solver
- Improved error messages for type families to describe what's wrong in more detail, and ideally without using the term
type family
at all. - Change
boolean
andstring
singletons in type checking to report errors to the user when they've gotten an impossible type (indicating a type error from their context). - Split debugging flags for type family reduction (
DebugLuauLogTypeFamilies
) from general solver logging (DebugLuauLogSolver
). - Improve type simplification to support patterns like
(number | string) | (string | number)
becomingnumber | string
.
Native Code Generation
- Use templated
luaV_doarith
to speedup vector operation fallbacks. - Various small changes to better support arm64 on Windows.
Internal Contributors
Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: James McNellis jmcnellis@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com
Full Changelog: 0.626...0.627
0.626
What's changed?
New Type Solver
- Fixed crash in numeric binary operation type families
- Results of an indexing operation are now comparable to
nil
without a false positive error - Fixed a crash when a type that failed normalization was accessed
- Iterating on a free value now implies that it is iterable
Full Changelog: 0.625...0.626