Luau's Performance
6 months ago
- #luau
- #optimization
- #performance
- Luau aims for high performance in gameplay code, focusing on making idiomatic code faster and enabling further tuning.
- Luau primarily runs in an interpreted context, with optional JIT compilation for x64 and arm64 platforms, leveraging type annotations.
- Features a highly tuned portable bytecode interpreter, optimized for efficient assembly with Clang and MSVC.
- Uses a multi-pass compiler for more flexible and optimized bytecode, with interprocedural optimizations limited to a single module.
- Implements an epsilon-overhead debugger without hooks, using bytecode patching and a custom interpreter loop for breakpoints and stepping.
- Optimizes table and global access with inline caching and HREFs, requiring field names known at compile time for best performance.
- Specializes method calls and builtin function calls for faster execution, with optimizations for common Lua idioms.
- Offers optimized table iteration and length operations, with O(logN) complexity for #t and specialized iterators for common patterns.
- Includes a fast memory allocator and optimized garbage collector pacing to reduce pauses and improve throughput.
- Provides native vector math support for 3-component 32-bit floating point vectors, reducing GC pressure and improving performance.
- Optimizes upvalue storage for immutable upvalues, reducing allocations and improving memory locality.
- Implements closure caching to reuse function objects when possible, reducing allocation traffic.
- Features optimized standard library functions, with additional utilities like table.create and table.find for better performance.
- Uses an incremental garbage collector with reduced pauses through optimizations like incremental marking of coroutines and shrinkable weak tables.
- Supports function inlining and loop unrolling at optimization level 2, improving performance where debuggability can be relaxed.