Releases: luau-lang/luau
0.573
Analysis
- Work toward affording parallel type checking
- The interface to
LazyType
has changed:LazyType
now takes a second callback that is passed theLazyType&
itself. This new callback is responsible for populating the fieldTypeId LazyType::unwrapped
. Multithreaded implementations should acquire a lock in this callback. - Modules now retain their
humanReadableNames
. This reduces the number of cases where type checking has to call back to aModuleResolver
.
- The interface to
- Add prefix and name location to AstTypeReference by @JohnnyMorganz in #902
- Add timing info to the Luau REPL compilation output
New type solver
- Thread ICEs (Internal Compiler Errors) back to the Frontend properly
- Refinements are no longer applied to lvalues
- More miscellaneous stability improvements
JIT
- Implement register spilling/restore for A64
- Correct Luau IR value restore location tracking
- Fixed use-after-free in x86 register allocator spill restore
- Use btz for bit tests
- Finish branch assembly support for A64
- Codesize and performance improvements for A64
- The bit32 library has been implemented for arm and x64
0.572
Analysis Changes
- Fixed exported types not being suggested in autocomplete
T...
is now convertible to...any
#767- Fixed issue with
T?
not being convertible toT | T
orT?
(sometimes when internal pointer identity is different) - Fixed potential crash in missing table key error suggestion to use a similar existing key
API changes
- Add lua_getuserdatadtor by @petrihakkinen in #870
lua_topointer
now returns a pointer for strings
For extra notes about internal development, you can read #899
0.571
What's Changed
table.sort
was improved further. It now guarentees N*log(N) time complexity in the worst case.- Fix #880
Full Changelog: 0.570...0.571
0.570
What's Changed
- Sync to upstream/release/570 by @vegorov-rbx in #885
0.569
- Sync to upstream/release/569 by @andyfriesen in #878
0.568
Analysis Changes
- A small subset of control-flow refinements have been added to recognize type options that are unreachable after a conditional/unconditional code block. (Fixes #356).
Some examples:
local function f(x: string?)
if not x then return end
-- x is 'string' here
end
Throwing calls like error
or assert(false)
instead of 'return' are also recognized.
Existing complex refinements like type/typeof and tagged union checks are expected to work, among others.
To enable this feature, LuauTinyControlFlowAnalysis
exclusion has to be removed from ExperimentalFlags.h
.
If will become enabled unconditionally in the future.
-
Linter has been integrated into the typechecker analysis so that type-aware lint warnings can work in any mode
Frontend::lint
methods were deprecated,Frontend::check
has to be used instead withrunLintChecks
option set.
Resulting lint warning are located insideCheckResult
. -
Part of Type error suppression RFC was implemented making subtyping checks with
any
type transitive.
Runtime Changes
- Fixed large performance drop and increased memory consumption when array is filled at an offset (Fixes #590)
For extra notes about internal development, you can read #865
0.567
What's Changed
- Fixed lerp() duplicate when compiling for C++20 by @niansa in #851
- Fixed LUAU_ASSERT failure in luaG_getline if called from lua_Alloc #850
- Recover AST of a declarations file #817
- Optimize math.floor/ceil/round with SSE4.1
- Results in a ~7-9% speedup on the math-cordic benchmark.
- Optimized table.sort.
- table.sort is now ~4.1x faster (when not using a predicate) and ~2.1x faster when using a simple predicate. Performance may improve further in the future.
- Reorganize the memory ownership of builtin type definitions.
- This is a small initial step toward affording parallel typechecking.
New Contributors
Full Changelog: 0.566...0.567
0.566
Analysis Changes
- DeprecatedApi lint can report some issues without type inference information
- Marked
table.getn
/foreach
/foreachi
as deprecated (RFC: Deprecate table.getn/foreach/foreachi)
Runtime Changes
- With -O2 optimization level, we now optimize builtin calls based on known argument/return count.
Note that this change can be observable ifgetfenv/setfenv
is used to substitute a builtin, especially if arity is different.
Fastcall heavy tests show a 1-2% improvement.
Other changes
- Fixed incorrect lexeme generated for string parts in the middle of an interpolated string (Fixes #744)
- Luau can now be built with clang-cl (Fixes #736)
- Fixed performance of autocomplete requests when suggestions have large intersection types (Solves https://github.com/Roblox/luau/discussions/847)
For extra notes about internal development, you can read #853
0.565
0.564
What's Changed
- Sync to upstream/release/564 by @vegorov-rbx in #841