TL;DR
This is a summary of the differences between Lus and Lua. The full specification for each feature can be found by clicking its acquis specification. Some features are meta and do not have an acquis (such as build-related features).
- Acquis 1: Expression-level
catchstatements instead ofpcall/xpcallfor error handling. - Acquis 2: Optional/nil-coalescing suffix operator
?for right-associative expressions. - Acquis 3: Assignments in
ifandelseifstatements that create scoped variables. - Acquis 4: Table destructuring with the new
fromassignment statement. - Acquis 5: First-class enum support with the
enum ... endsyntax. - Acquis 6: Much-needed
tojson/fromjsonimplementation. - Acquis 7: Filesystem functionality through the
fs.*library. - Acquis 8:
string.transcodefor converting between different encodings. - Acquis 9: Network library featuring TCP/UDP support and a generic HTTP fetch implementation.
- Acquis 10: A
pledge-like capability-based permissions system for explicitly defining what your code needs access to. - Acquis 11: Concurrency based on M:N hybrid threading and message passing through workers.
- Acquis 12:
debug.parseand--ast-graph/--ast-jsoncommand-line options for generating abstract syntax trees from Lus code. - Acquis 13: Assignments in
whileloops that create scoped variables. - Acquis 14: Pedantic mode for the parser, which alerts to Lua semantics that have since been superseded by new Lus syntax.
- Acquis 15: Mutable byte buffers via the
vectortype and library. - Acquis 16: Slice syntax
t[start, end]for extracting subsequences from tables, strings, and vectors. - Acquis 17:
table.clone(t, deep?)for shallow and deep table copying. - Acquis 18: Local groups for grouping stack-allocated variables under a single name.
- First-class support for WebAssembly.
- Switch from Makefiles to Meson for compilation.