Releases: luau-lang/luau
0.648
What's new
- Added
math.map
function to the standard library, based on RFC for math.map FileResolver
can provide an implementation ofgetRequireSuggestions
to provide auto-complete suggestions for require-by-string
New Solver
- In user-defined type functions,
readproperty
andwriteproperty
will returnnil
instead of erroring if property is not found - Fixed incorrect scope of variadic arguments in the data-flow graph
- Fixed multiple assertion failures
Internal Contributors:
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Hunter Goldstein [email protected]
Co-authored-by: Varun Saini [email protected]
Co-authored-by: Vighnesh Vijay [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
Full Changelog: 0.647...0.648
0.647
What's Changed
- Rename
type
field of AstStatTypeAlias in JSON Encoder by @Dekkonot in #1461 - Support function attributes in luau-ast by @Dekkonot in #1466
- Fix an old solver crash that occurs in the presence of cyclic
requires()
New Solver
- Improvements to Luau user-defined type function library
- Avoid asserting on unexpected metatable types
- Properties in user defined type functions should have a consistent iteration order - in this case it is insertion ordering
Runtime
- Track VM allocations for telemetry
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Andy Friesen [email protected]
Co-authored-by: Hunter Goldstein [email protected]
Co-authored-by: James McNellis [email protected]
Co-authored-by: Varun Saini [email protected]
Co-authored-by: Vighnesh Vijay [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
Full Changelog: 0.646...0.647
0.646
What's Changed?
- Fix some cases where documentation symbols would not be available when mouseovering at certain positions in the code
- Scaffolding to help embedders have more control over how
typeof(x)
refines types - Refinements to require-by-string semantics. See luau-lang/rfcs#56 for details.
New Solver
- Fix many crashes in the new solver (thanks you for your bug reports!)
- Type functions all evaluate in a single VM. This should improve typechecking performance and reduce memory use.
export type function
is now forbidden and fails with a clear error message- Type functions that access locals in the surrounding environment are now properly a parse error
- You can now use
:setindexer(types.never, types.never)
to delete an indexer from a table type.
Internal Contributors
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Hunter Goldstein [email protected]
Co-authored-by: Varun Saini [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
Full Changelog: 0.645...0.646
0.645
What's changed?
In this update, we continue to improve the overall stability of the new type solver. We're also shipping some early bits of two new features, one of the language and one of the analysis API: user-defined type functions and an incremental typechecking API.
If you use the new solver and want to use all new fixes included in this release, you have to reference an additional Luau flag:
LUAU_DYNAMIC_FASTINT(LuauTypeSolverRelease)
And set its value to 645
:
DFInt::LuauTypeSolverRelease.value = 645; // Or a higher value for future updates
New Solver
- Fix a crash where scopes are incorrectly accessed cross-module after they've been deallocated by appropriately zeroing out associated scope pointers for free types, generic types, table types, etc.
- Fix a crash where we were incorrectly caching results for bound types in generalization.
- Eliminated some unnecessary intermediate allocations in the constraint solver and type function infrastructure.
- Built some initial groundwork for an incremental typecheck API for use by language servers.
- Built an initial technical preview for user-defined type functions, more work still to come (including calling type functions from other type functions), but adventurous folks wanting to experiment with it can try it out by enabling
FFlag::LuauUserDefinedTypeFunctionsSyntax
andFFlag::LuauUserDefinedTypeFunctions
in their local environment. Special thanks to @joonyoo181 who built up all the initial infrastructure for this during his internship!
Miscellaneous changes
- Fix a compilation error on Ubuntu (fixes #1437)
Internal Contributors:
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Hunter Goldstein [email protected]
Co-authored-by: Jeremy Yoo [email protected]
Co-authored-by: Vighnesh Vijay [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
0.644
What's Changed
In this update we improve overall stability of the new type solver and address some type inference issues with it.
If you use the new solver and want to use all new fixes included in this release, you have to reference an additional Luau flag:
LUAU_DYNAMIC_FASTINT(LuauTypeSolverRelease)
And set its value to 644
:
DFInt::LuauTypeSolverRelease.value = 644; // Or a higher value for future updates
New Solver
- Fixed a debug assertion failure in autocomplete (Fixes #1391)
- Fixed type function distribution issue which transformed
len<>
andunm<>
intonot<>
(Fixes #1416) - Placed a limit on the possible normalized table intersection size as a temporary measure to avoid hangs and out-of-memory issues for complex type refinements
- Internal recursion limits are now respected in the subtyping operations and in autocomplete, to avoid stack overflow crashes
- Fixed false positive errors on assignments to tables whose indexers are unions of strings
- Fixed memory corruption crashes in subtyping of generic types containing other generic types in their bounds
Internal Contributors:
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Andy Friesen [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
Full Changelog: 0.643...0.644
0.643
What's Changed
- keyof - fix LUAU_ASSERT when there's only one key entry by @karl-police in #1388
- Add default "out" folder for CMake Project Visual Studio by @karl-police in #1394
- Fix crash with the index type function, where it would stack overflow due to not waiting for a pending-expansion by @karl-police in #1407
New Solver
- We now unconditionally generalize functions with explicit generics
- Bugfixes for how we run builtin tests
VM
- Fixed running Luau conformance tests in LUA_VECTOR_SIZE == 4 configuration
New Contributors
- @karl-police made their first contribution in #1388
Full Changelog: 0.642...0.643
Internal Contributors:
Co-authored-by: Hunter Goldstein [email protected]
Co-authored-by: James McNellis [email protected]
Co-authored-by: Vighnesh Vijay [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
0.642
What's Changed
New Solver
- The type functions
keyof
andindex
now also walk the inheritance chain when they are used on class types like Roblox instances.
Full Changelog: 0.641...0.642
0.641
What's new
- Light update this week, mostly fast flag cleanups.
New Solver
- Rename flag to enable new solver from
DebugLuauDeferredConstraintResolution
toLuauSolverV2
- Added support for magic functions for the new type checker (as opposed to the type inference component)
- Improved handling of
string.format
with magic function improvements - Cleaning up some of the reported errors by the new type checker
- Minor refactoring of
TypeChecker2.cpp
that happens to make the diff very hard to read.
Internal Contributors
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Andy Friesen [email protected]
Co-authored-by: Vighnesh Vijay [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
0.640
What's Changed
- Fixed many of the false positive errors in indexing of table unions and table intersections
- It is now possible to run custom checks over Luau AST during typechecking by setting
customModuleCheck
inFrontendOptions
- Fixed codegen issue on arm, where number->vector cast could corrupt that number value for the next time it's read
New Solver
error
type now behaves as the bottom type during subtyping checks- Fixed the scope that is used in subtyping with generic types
- Fixed
astOriginalCallTypes
table often used by LSP to match the old solver
Internal Contributors
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Andy Friesen [email protected]
Co-authored-by: Vighnesh Vijay [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]
Full Changelog: 0.639...0.640
0.639
What's Changed
- Fix size of userdata metatable array by @petrihakkinen in #1366
- Make
os.clock
useclock_gettime
on FreeBSD by @Ketasaja in #1364 - Variety of bugfixes in the new solver
- Fix a bug in lua_resume where too many values might be removed from stack when resume throws an error
New Solver
- Fix an issue where we would hit a recursion limit when applying long chains of type refinements.
- Weaken the types of
table.freeze
andtable.clone
in the new solver so we can accept common code patterns likelocal a = table.freeze({x=5, x=0})
at the expense of accepting code liketable.freeze(true)
. - Don't warn when the # operator is used on a value of type never
Full Changelog: 0.638...0.639
Internal Contributors
Co-authored-by: Aaron Weiss [email protected]
Co-authored-by: Andy Friesen [email protected]
Co-authored-by: Vighnesh Vijay [email protected]
Co-authored-by: Vyacheslav Egorov [email protected]