Changes / improvements
- Introduce
arg: xnamed arguments instead of.arg = x, deprecate old style. - Support splat for varargs #1352.
- Allow
varin lambdas in macros. - Support
int[*] { 1, 2, 3 }expressions. - Support inline struct designated init as if inline was anonymous.
- Introduce the
.paramsofproperty. - Support environment variable 'C3C_LIB' to find the standard library.
- Support environment variable 'C3C_CC' to find the default C compiler.
- Support casting bitstructs to bool.
- Allow user-defined attributes to have typed parameters.
- Add
.gitkeepfiles to project subfolders. - Add
env::COMPILER_BUILD_HASHandenv::COMPILER_BUILD_DATE - Support linking .o files in compilation command. #1417
- Slicing constant strings at compile time works.
- Add
project fetchsubcommand to fetch missing project dependencies (general and target specific) - Ability of
vendor-fetchto download the dependencies in the first specified pathdependencies-search-path - Ability of
vendor-fetchto register the fetched dependencies in the project file. - Allow the "self" parameter to be $/# for macro methods.
- Support compile time slicing of untyped lists.
- Allow specifying an import module using
@wasm#1305. - Deprecated inline generic types outside of struct definitions and macros unless marked
@adhoc. - Improved method detection in earlier stages of checking.
- Allow
@norecurseattribute for non-recursive imports #1480. - wasm32 / wasm64 targets are use-libc=no by default.
- Add hash/sha256 module
Fixes
- Issue where a lambda wasn't correctly registered as external. #1408
- Generic methods were incorrectly registered as functions, leading to naming collisions. #1402
- Deprecated tuple / triple types.
- Converting a slice to a vector/array would copy too little data.
- Crash when reading an empty 'manifest.json'.
- "optsize" did not work correctly in project.json.
l[0].a = 1now supported for overloads due to better lvalue handling #1357.- Asserts are retained regardless of optimization when running tests.
- Limit object filename lengths. #1415
- Fix regression for
$include. - Correct '.so' suffix on dynamic libraries on Linux.
- Fix bug where inline index access to array in a struct would crash the compiler.
- Asserts are now correctly included and traced in when running tests.
- Use atexit to fix finalizers on Windows #1361.
- Fix bugs in "trap-on-wrap" #1434.
- Bug with casting anyfault to error.
- Lambda / function type would accidentally be processed as a method.
- Fix error message when not finding a particular function.
- Crash invoking a
@bodyargument with the wrong number of parameters. - Fix reordering semantics in struct assignment.
- Regression when passing types as
#exprarguments. #1461 - Temp allocator overwrites data when doing reset on extra allocated pages. #1462
- User defined attributes could not have more than 1 parameter due to bug.
- Folding a constant array of structs at compile time would cause an assert.
- Enum attributes would be overwritten by enum value attributes.
- LLVM issue with try when bool is combined #1467.
- Segfault using ternary with no assignment #1468.
- Inner types make some errors misleading #1471.
- Fix bug when passing a type as a compile time value.
- Fix bug due to enum associated values not being checked for liveness.
- Regression when compile time accessing a union field not last assigned to.
- Safer seed of rand() for WASM without libc.
- Bad error message aliasing an ident with a path. #1481.
- Error when slicing a struct with an inline array #1488.
- Improved error messages on
Foo a = foo { 1 };#1496 - Bug in json decoder escape handling.
- Fix bug when reading zip manifest, that would not return a zero terminated string. #1490
- Fix thread tests.
- Detect recursion errors on non-recursive mutexes in safe mode.
- Foreach over distinct pointer failed to be caught as error #1506.
- Foreach over distinct iterable would ignore operator(len).
- Compiler crash when compiling c code in a library without --obj-out #1503.
Stdlib changes
- Additional init functions for hashmap.
formatfunctions are now functions and work better with splat.- Add support for the QOI format.
- Add
io::read_new_fullyfor reading to the end of a stream. - Add
io::wrap_bytesfor reading bytes withiofunctions. - Add
rndandrand_in_rangedefault random functions. - Additional timezone related functions for
datetime. - Added MD5 and crypto::safe_compare.
- Added generic HMAC.
- Added generic PBKDF2 implementation.
- DString
reverse. DString.insert_atnow has variants for other types.