Acquis
Acquis are the accumulated changes and additions to the language. They are formally defined in advance and implemented incrementally, with dependency acquis implemented first so that other acquis can build upon them. Evolving the language through acquis allows for a delineated, documentable progression of the language across time. For those familiar with the term, acquis are functionally similar to RFCs, but there aren’t any actual requests for comments and it is more of a means of documenting and studying future changes to the language.
Not all changes necessarily go through an acquis. Bugfixes, test cases, commandline changes, and other minor alterations are often implemented directly. An acquis is mostly useful when drafting technically complex additions to the language that requires careful advance study, especially as it relates to preserving the minimalism of the language’s semantics or increasing the size of the runtime. Generally, when something requires the integration of an external library, an acquis is necessary.
Stable
- Acquis 0 : The initial state of the language at the fork from Lua 5.5 RC 2, and what an acquis is.
- Acquis 1 - Catch : Expression-level catch statements instead of pcall/xpcall for error handling.
- Acquis 2 - Optional Chaining : Optional/nil-coalescing suffix operator ? for right-associative expressions.
- Acquis 3 - If-Assignment : Assignments in if and elseif statements that create scoped variables.
- Acquis 4 - Table Destructuring : Table destructuring with the from assignment statement.
- Acquis 5 - Enums : First-class enum support with the enum ... end syntax.
- Acquis 6 - JSON : Much-needed tojson/fromjson implementation.
- Acquis 7 - Filesystem : Filesystem functionality through the fs.* library.
- Acquis 8 - Transcoding : string.transcode for converting between different encodings.
- Acquis 9 - Network : Network library featuring TCP/UDP support and a generic HTTP fetch implementation.
- Acquis 10 - Permissions : A pledge-like capability-based permissions system for explicitly defining what your code needs access to.
- Acquis 11 - Workers : Concurrency based on M:N hybrid threading and message passing through workers.
- Acquis 12 - AST : debug.parse and --ast-graph/--ast-json command-line options for generating abstract syntax trees from Lus code.
- Acquis 13 - While-Assignment : Assignments in while loops that create scoped variables.
- Acquis 14 - Pedantic Warnings : Pedantic mode for the parser, which alerts to Lua semantics that have since been superseded by new Lus syntax.
- Acquis 15 - Vectors : Mutable byte buffers via the vector type and library.
- Acquis 16 - Slices : Slice syntax t[start, end] for extracting subsequences from tables, strings, and vectors.
- Acquis 17 - Table Cloning : table.clone(t, deep?) for shallow and deep table copying.
- Acquis 18 - Local Groups : Local groups for grouping stack-allocated variables under a single name.
- Acquis 19 - Standalone Binaries : Standalone binaries that bundle scripts into the interpreter executable.
- Acquis 20 - Catch Handlers : Catch handlers for transforming errors with catch[handler] expr syntax.
- Acquis 21 - String Interpolation : String interpolation for dynamic construction of strings by interpolating values into a template.
- Acquis 22 - Runtime Attributes : Runtime attributes for controlling local variable assignment behavior.
- Acquis 23 - Do Expressions : Do expressions that evaluate do/end blocks to a value via provide.
- Acquis 24 - CSV : Built-in fromcsv and tocsv functions for parsing and serializing CSV data.
- Acquis 25 - Data Processing : Data processing extensions to the table and string modules.
- Acquis 26 - Compression : Compression and decompression via the vector.archive module, supporting gzip, deflate, zstd, brotli, and lz4.
- Acquis 27 - Readonly Environment : The --readonly-env flag freezes _ENV and module tables, enabling fast-dispatch fastcalls.
Unstable
- Acquis 28 - Flags : A readonly flags table populated from --flag/-F arguments and folded into conditionals at compile time.
- Acquis 29 - Preinclusion : The --include flag parses modules at startup so require loads them without load or fs pledges.
- Acquis 30 - Time : Immutable instant, duration, and zoned types with an embedded IANA tzdata database.
- Acquis 33 - SQLite : File-backed and in-memory databases with prepared statements, transactions, and pledge-gated file access.
- Acquis 34 - Queries : An in-syntax query language with lazy first-class query values and automatic provider push-down.