Skip to content

Releases: luau-lang/luau

0.645

27 Sep 19:02
02241b6
Compare
Choose a tag to compare

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 and FFlag::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 aaronweiss@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@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

0.644

20 Sep 17:39
f5dabc2
Compare
Choose a tag to compare

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<> and unm<> into not<> (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 aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

Full Changelog: 0.643...0.644

0.643

13 Sep 18:54
b765d7b
Compare
Choose a tag to compare

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

Full Changelog: 0.642...0.643


Internal Contributors:

Co-authored-by: Hunter Goldstein hgoldstein@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

0.642

06 Sep 20:45
d9536ce
Compare
Choose a tag to compare

What's Changed

New Solver

  • The type functions keyof and index now also walk the inheritance chain when they are used on class types like Roblox instances.

Full Changelog: 0.641...0.642

0.641

04 Sep 19:14
b23d434
Compare
Choose a tag to compare

What's new

  • Light update this week, mostly fast flag cleanups.

New Solver

  • Rename flag to enable new solver from DebugLuauDeferredConstraintResolution to LuauSolverV2
  • 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 aaronweiss@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

0.640

23 Aug 16:59
d518d14
Compare
Choose a tag to compare

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 in FrontendOptions
  • 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 aaronweiss@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.639...0.640

0.639

16 Aug 18:37
25f91aa
Compare
Choose a tag to compare

What's Changed

  • Fix size of userdata metatable array by @petrihakkinen in #1366
  • Make os.clock use clock_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 and table.clone in the new solver so we can accept common code patterns like local a = table.freeze({x=5, x=0}) at the expense of accepting code like table.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 aaronweiss@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

0.638

09 Aug 17:27
ce8495a
Compare
Choose a tag to compare

What's Changed

New Solver

  • Fix some type inference issues surrounding updates to upvalues eg
local x = 0

function f()
    x = x + 1
end
  • User-defined type function progress
  • Bugfixes for normalization of negated class types. eg SomeClass & (class & ~SomeClass)
  • Fixes to subtyping between tables and the top table type.

Internal Contributors

Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Jeremy Yoo jyoo@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

Full Changelog: 0.637...0.638

0.637

02 Aug 17:06
ce8495a
Compare
Choose a tag to compare

What's Changed?

  • Bug fixes fixes in the new solver

New Solver

  • Simplification of two completely disjoint tables combines them into a single table that inherits all properties / indexers
  • Refining a never & <anything> does not produce type family types nor constraints
  • Silence "inference failed to complete" error when it is the only error reported

Internal Contributors

Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Dibri Nsofor dnsofor@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

New Contributors

Full Changelog: 0.636...0.637

0.636

26 Jul 18:01
5e0779f
Compare
Choose a tag to compare

What's Changed?

  • Telemetry support for usage of any type in old/new solver
  • Bug fixes in the new solver

New Solver

  • Fixed constraint ordering bug to infer types more accurately
  • Improved inferring a call to setmetatable()

VM

  • Restored global metatable lookup for typeof on lightuserdata to fix
    unintentional API change (Fixes #1335)

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: Dibri Nsofor dnsofor@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

New Contributors

Full Changelog: 0.635...0.636