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, and minor changes 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 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.
Unstable
- 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.