Changes / improvements
- Windows aarch64 is now supported.
- Tracking allocator can now accept cross-thread allocations.
- Filter test backtraces #3368
- Improved GDB compatibility for macros.
- Fail when "emcc" is unavailable instead of falling back to the built-in wasm linker.
- Support fetching MacSDK for easy cross compilation.
- Add
@featattribute, deprecate@ifon non-generic top level declarations. - Add
$featcompile time function.$featureis deprecated and replaced by$feat. - Experimental support for
constset,cenum,faultconst,faultset,excuse,attrgroup,attrmacro,distinct. - Defer resolution of typedef alignment and generics, allowing more recursive definitions.
- Improve error message on multiple <* *> in a row. #2971
- Add the
lgdtandlidtinstructions to x86 inline assembly.
Stdlib changes
- LinkedList and Deque added a
prependmethod. - Added
FixedList.is_full()method Rect.contains_pointis now exclusive on the maximum edge.- Add
Bounds- a rectangular region stored as aminandmaxvalue, with all operations being inclusive along the boundary edge. - Experimental regex support.
- Improved RFC 3986 compatibility.
- JSON unmarshaling support,
json::unmarshaland family. - Object unmarshaling support,
object::unmarshaland family. json::temp_loaddeprecated in favour ofjson::tload.Object::is_mapnow returns true for empty objects.- Add
range::upto,range::inclusiveandrange::exclusivemacros. - Add
io::read_buffer. DateTimeenable comparison operators.- Add
Range.to_arrayandExclusiveRange.to_arraymethods.
Fixes
- Generic functions and values incorrectly would not require a prefix. #3374
- Arena allocator would error in safe mode when freeing the last memory and the arena was full. #3378
- LinkedList
push_front_allwas appending in the wrong order. BitSet.lenwould yield the size of the underlying type, not the length.- RFC3339 formatting would yield incorrect value for microseconds.
--objwill always retain the object files. #3380- ThreadGroup with function returning
voidwas broken. - Timed
tcp::connectalways failed withio::GENERAL_ERRORinstead of the real result. - Compile time struct with zeroed union member access causes compiler error #3382.
- Generic methods checked before the generic type is fully registered.
- Math function
_erffinvoked Cerffunction instead oferfffunction #3391 - Defining local constants inside a macro causes it to fail to @const fold. #3397
- AES CTR would lose sync on data not multiples of 16.
- In some cases, on macros rethrowing optional values codegen could fail.
- Json accepted incorrectly accepted
\vas whitespace. - JSONC parsing on unterminated comments would loop indefinitely.
- ZII array constdef would cause an assert. #3411
- Calling a constant void macro inside a macro stops it from being constant. #3410
- Using io::struct_to_format with
$force_dump = truefailed to compile. $foo += 1would not do a copy, leading to incorrect update of$foo. #3400foreach (foo::Type t : x)would not parse properly. #3423- Docgen improvements and fixes: emit
attrdefdeclarations/docs, includealiasdoc comments, render@returncontracts, excludecompiler_rtwhen--emit-stdlib=no, and omit empty JSON fields for slimmer output #3422. - Several uses of InStream didn't properly handle io::EOF.
- Fixes to memory handling during zip loading.
- Multireader reading after a final empty read would crash.
- RISC-V structs with mixed FP and integer fields were corrupted when passed or returned by value. #3428
io::read_alldidn't handle split data.Scannerwould not correctly handle chunked data.Gzipreader couldn't handle a stream without seek.io::printf("%3d", 1)would return the wrong printed length. #3432- Crash when using ternary operator with vector type and inline constdef #3433
- Crash on assign-op to compile-time subscript with non-const result #3419