Skip to content

Releases: luau-lang/luau

0.655

13 Dec 21:27
2e6fdd9
Compare
Choose a tag to compare

What's Changed

New Solver

  • Type functions should be able to signal whether or not irreducibility is due to an error
  • Do not generate extra expansion constraint for uninvoked user-defined type functions
  • Print in a user-defined type function reports as an error instead of logging to stdout
  • Many e-graphs bugfixes and performance improvements
  • Many general bugfixes and improvements to the new solver as a whole
  • Fixed issue with used-defined type functions not being able to call each other
  • Infer types of globals under new type solver

Fragment Autocomplete

  • Miscellaneous fixes to make interop with the old solver better

Runtime

  • Support disabling specific built-in functions from being fast-called or constant-evaluated (Closes #1538)
    • New compiler option disabledBuiltins accepts a list of library function names like "tonumber" or "math.cos"
  • Added constant folding for vector arithmetic
  • Added constant propagation and type inference for vector globals (Fixes #1511)
    • New compiler option librariesWithKnownMembers accepts a list of libraries for members of which a request for constant value and/or type will be made
    • libraryMemberTypeCb callback is called to get the type of a global, return one of the LuauBytecodeType values. 'boolean', 'number', 'string' and 'vector' type are supported.
    • libraryMemberConstantCb callback is called to setup the constant value of a global. To set a value, C API luau_set_compile_constant_* or C++ API setCompileConstant* functions should be used.

New Contributors

Full Changelog: 0.654...0.655

What's changed


Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Aviral Goel agoel@roblox.com
Co-authored-by: Daniel Angel danielangel@roblox.com
Co-authored-by: Jonathan Kelaty jkelaty@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

0.654

03 Dec 01:09
8cc289f
Compare
Choose a tag to compare

What's Changed?

  • Support dead store elimination for STORE_VECTOR instruction
  • Fix parser hang when a separator is used between Luau class
    declaration properties
  • Provide properties and metatable for built-in vector type definition
    to fix type errors
  • Fix Fragment Autocomplete to ensure correct parentheses insertion
    behavior.
  • Add support for 'thread' and 'buffer' primitive types in user-defined
    type functions

Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

New Contributors

Full Changelog: 0.653...0.654

0.653

22 Nov 21:07
d19a5f0
Compare
Choose a tag to compare

What's Changed?

  • Optimized the vector dot product by up to 24%
  • Allow for x/y/z/X/Y/Z vector field access by registering a vector metatable
    with an __index method (Fixes #1521)
  • Fixed a bug preventing consistent recovery from parse errors in table types
  • Optimized k*n and k+n when types are known
  • Allow fragment autocomplete to handle cases like the automatic insertion of
    parens, keywords, strings, etc., while maintaining a correct relative positioning

New Solver

  • Allow for nil assignment to tables and classes with indexers

Internal Contributors:

Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Aviral Goel agoel@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

Full Changelog: 0.652...0.653

0.652

15 Nov 23:14
e905e30
Compare
Choose a tag to compare

What's Changed

  • Add support for mixed-mode type checking, which allows modules checked
    in the old type solver to be checked and autocompleted by the new one.
  • Generalize RequireResolver to support require-by-string semantics in
    luau-analyze.
  • Fix a bug in incremental autocomplete where DefIds associated with
    index expressions were not correctly picked up.
  • Fix a bug that prevented "complex" types in generic parameters (for
    example, local x: X<(() -> ())?>).
  • CodeGen: Rewrite dot product lowering using a dedicated IR instruction by @zeux in #1512
  • Fix mesh-normal-vector benchmark array access by @zeux in #1514
  • Remove noexcepts from Config by @vrn-sn in #1523

Issues fixed

New Contributors

Full Changelog: 0.651...0.652


Internal Contributors:

Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com

0.651

08 Nov 22:38
a36a3c4
Compare
Choose a tag to compare

What's Changed

  • Fragment Autocomplete: a new API allows for type checking a small fragment of code against an existing file, significantly speeding up autocomplete performance in large files.
  • Requiring a path with a ".lua" or ".luau" extension will now have a bespoke error suggesting to remove said extension.
  • Fixes a bug in which whether two Luau::Symbols are equal depends on whether the new solver is enabled.
  • Fix definition module name & location by @checkraisefold in #1495
  • Pre-populate/duplicate check class definitions (new solver) by @checkraisefold in #1493
  • Set the defining module even when the new solver cloned the type. by @aatxe in #1506
  • Replace old site urls by @Barocena in #1505

New Solver

  • E-Graphs have landed: this is an ongoing approach to make the new type solver simplify types in a more consistent and principled manner, based on similar work (see: https://egraphs-good.github.io/).
  • Adds support for exporting / local user type functions (previously they were always exported).
  • Fixes a set of bugs in which the new solver will fail to complete inference for simple expressions with just literals and operators.

General Updates

New Contributors

Full Changelog: 0.650...651


Internal Contributors:

Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: David Cope dcope@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

0.650

01 Nov 19:33
a251bc6
Compare
Choose a tag to compare

What's Changed

  • New vector library! See https://rfcs.luau.org/vector-library.html for details
  • Replace the use of non-portable strnlen with memchr. strnlen is not part of any C or C++ standard.
  • Introduce lua_newuserdatataggedwithmetatable for faster tagged userdata creation of userdata with metatables registered with lua_setuserdatametatable

Old Solver

  • It used to be the case that a module's result type would unconditionally be inferred to be any if it imported any module that participates in any import cycle. This is now fixed.

New Solver

  • Improve inference of table.freeze: We now infer read-only properties on tables after they have been frozen.
  • We now correctly flag cases where string.format is called with 0 arguments.
  • Fix a bug in user-defined type functions where table properties could be lost if the table had a metatable
  • Reset the random number seed for each evaluation of a type function
  • We now retry subtyping arguments if it failed due to hidden variadics.

Internal Contributors

Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Aviral Goel agoel@roblox.com
Co-authored-by: David Cope dcope@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

Full Changelog: 0.649...0.650

0.649

26 Oct 02:15
db80939
Compare
Choose a tag to compare

What's new?

  • More progress on the upcoming analysis API for fragment type inference.
  • Fix a bug in type normalization where intersection did not appropriately respect resource limits (affects new and old type solvers).
  • Allow type normalization to track cyclic pairs of types in inhabitance checks.
  • Fix a bug in the old type solver where Unifier did not necessarily live long enough.
  • Check the coroutine stack size before resuming in the Luau VM.

New Type Solver

  • Add support for typestating table.freeze and updated its behavior to transform the given table types into being marked read-only for all of its properties. More to come here for indexers when we add support for read-only indexers.
  • Fix #1453 by adding a missing arity check to string.format.
  • Fix a crash when editing caused by invalid AST states not being visited properly by the type solver.
  • Fix a crash in type simplification caused by missing follow calls.

Internal Contributors:

Co-authored-by: Aaron Weiss aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

0.648

18 Oct 18:08
e491128
Compare
Choose a tag to compare

What's new

  • Added math.map function to the standard library, based on RFC for math.map
  • FileResolver can provide an implementation of getRequireSuggestions to provide auto-complete suggestions for require-by-string

New Solver

  • In user-defined type functions, readproperty and writeproperty will return nil 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 aaronweiss@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

Full Changelog: 0.647...0.648

0.647

12 Oct 00:59
77295c3
Compare
Choose a tag to compare

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 aaronweiss@roblox.com
Co-authored-by: Andy Friesen afriesen@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: James McNellis jmcnellis@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vighnesh Vijay vvijay@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

Full Changelog: 0.646...0.647

0.646

04 Oct 18:43
543de6e
Compare
Choose a tag to compare

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 aaronweiss@roblox.com
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com

Full Changelog: 0.645...0.646