0.7.9 Change list
Changes / improvements
- Add
--custom-libcoption for custom libc implementations. - Support for NetBSD.
- Testing for the presence of methods at the top level is prohibited previous to method registration.
$$mask_to_intand$$int_to_maskto create bool masks from integers and back.- Better error messages when slicing a pointer to a slice or vector. #2681
- Generics using ad-hoc
<...>rather than module based. - Reduced memory usage for backtraces on Linux.
- On win32 utf-8 console output is now enabled by default in compiled programs
- Add
$$VERSIONand$$PRERELEASEcompile time constants. - Require () around assignment in conditionals. #2716
- $$unaligned_load and $$unaligned_store now also takes a "is_volatile" parameter.
- Module-based generics using {} is deprecated.
- Create optional with
~instead of?.return io::EOF?;becomesreturn io::EOF~. - Deprecated use of
?to create optional. - Make
foo.$abcimplicitly meanfoo.eval("$abc"). - Deprecating multi-level array length inference.
int[*][*]is deprecated and will be removed 0.8.0. - Combining argument-less initialization with argument init for bitstructs is now allowed e.g.
{ .b, .c = 123 }.
Fixes
- Remove use of LLVMGetGlobalContext for single module compilation.
- Fixed bug where constants would get modified when slicing them. #2660
- Regression with npot vector in struct triggering an assert #2219.
- Casting bitstruct to wider base type should be single step #2616.
- Optional does not play well with bit ops #2618.
Bytebuffer.growwas broken #2622.- Hex escapes like
"\x80"would be incorrectly lowered. #2623 - Ignore const null check on deref in
$definedand$sizeof#2633. - Subscripting of constant slices would sometimes be considered non-constant #2635.
- Compiler crash when concatenating structs and arrays to an untyped list.
- Strings assigned to longer arrays would crash codegen, e.g.
char[10] x = "abcd. - Typedefs and structs with inline types supporting lengthof would not work with lengthof #2641.
$defined(foo())now correctly errors iffoo()would require a path.@if($defined((char*){}.foo()))does not error iffoois missing.- Hard limit of 127 characters for identifiers.
$$LINEwould sometimes yield the incorrect format.- Fix error message when a method has the wrong type for the first argument.
- Unit tests allocating too much
tmemwithout@poolwould cause errors in unrelated tests. #2654 - Incorrect rounding for decimals in formatter in some cases. #2657
- Incorrectly using LLVMStructType when emitting dynamic functions on MachO #2666
- FixedThreadPool join did not work correctly.
- Fix bug when creating bool vectors in certain cases.
- Compiler assert when passing returning CT failure immediately rethrown #2689.
- Converting between simd/non-simd bool vector would hit a compiler assert. #2691
i<n>suffixes were not caught when n < 8, causing an assert.- Parse error in
$definedwas not handled correctly, leading to an assertion. - Assert when struct/array size would exceed 4 GB.
- Assert when encountering a malformed module alias.
- Assert when encountering a test function with raw vaarg parameters.
foo.xwas not always handled correctly whenfoowas optional.x'1234' +++ (ichar[1]) { 'A' }would fail due to missing const folding.- Miscompilation: global struct with vector could generate an incorrect initializer.
String.tokenize_allwould yield one too many empty tokens at the end.String.replaceno longer depends onString.split.- Fix the case where
\u<unicode char>could crash the compiler on some platforms. - Designated initialization with ranges would not error on overflow by 1.
io::read_fullynow handles unbounded streams properly.- Crash when doing a type property lookup for const inline enums in some cases #2717.
- Incorrect alignment on typedef and local variable debug info.
- Assert on optional-returning-function in a comma expression. #2722
- Creating recursive debug info for functions could cause assertions.
- bitorder::read and bitorder::write may fail because of unaligned access #2734.
- Fix
LinkedList.to_formatto properly iterate linked list for printing. - Hashing a vector would not use the entire vector in some cases.
- Fix to
temp_directoryon Windows #2762. - Too little memory reserved when printing backtrace on Darwin #2698.
- In some cases, a type would not get implicitly converted to a typeid #2764.
- Assert on defining a const fault enum with enumerator and fault of the same name. #2732
- Passing a non-conststring to module attributes like @cname would trigger an assert rather than printing an error. #2771
- Passing different types to arg 1 and 2 for $$matrix_transpose would trigger an assert. #2771
- Zero init of optional compile time variable would crash the compiler. #2771
- Using multiple declaration for generics in generic module would fail. #2771
- Defining an extern const without a type would crash rather than print an error. #2771
- Typedef followed by brace would trigger an assert. #2771
- Union with too big member would trigger an assert. #2771
- Bitstruct with unevaluated user-defined type would cause a crash. #2771
- Using named parameters with builtins would cause a crash. #2771
- In some cases, using missing identifiers with builtins would cause a crash. #2771
- Using
$definedwith function call missing arguments would cause a crash. #2771 - Adding @nostrip to a test function would crash. #2771
- Mixing struct splat, non-named params and named params would crash rather than to print an error. #2771
- Creating a char vector from bytes would crash. #2771
- Using $$wstr16 with an illegal argument would crash instead of printing an error. #2771
- Empty struct after
@ifprocessing was not detected, causing a crash instead of an error. #2771 - Comparing an uint and int[<4>] was incorrectly assumed to be uint compared to int, causing a crash instead of an error. #2771
- When an
int[*][6]was given too few values, the compiler would assert instead of giving an error. #2771 - Inferring length from a slice was accidentally not an error.
- Eager evaluation of macro arguments would break inferred arrays on some platforms. #2771.
- Vectors not converted to arrays when passed as raw vaargs. #2776
- Second value in switch range not checked properly, causing an error on non-const values. #2777
- Broken cast from fault to array pointer #2778.
- $typeof untyped list crashes when trying to create typeid from it. #2779
- Recursive constant definition not properly detected, leading to assert #2780
- Failed to reject void compile time variables, leading to crash. #2781
- Inferring the size of a slice with an inner inferred array using {} isn't detected as error #2783
- Bug in sysv abi when passing union in with floats #2784
- When a global const has invalid attributes, handling is incorrect, leading to a crash #2785.
int? ?was not correctly handled. #2786- Casting const bytes to vector with different element size was broken #2787
- Unable to access fields of a const inline enum with an aggregate underlying type. #2802
- Using an optional type as generic parameter was not properly caught #2799
- Instantiating an alias of a user-defined type was not properly caught #2798
- Too deeply nested scopes was a fatal crash and not a regular semantic error. #2796
- Recursive definition of tag not detected with nested tag/tagof #2790
- Attrdef eval environment lacked rtype, causing error on invalid args #2797
- $typeof() returns typeinfo, causing errors #2795.
- Empty ichar slice + byte concatenation hit an assert. #2789
- Remove dependency on test tmp library for stdlib compiler tests. #2800
- Comparing a flexible array member to another type would hit an assert. #2830
- Underlying slice type not checked correctly in $defined #2829
- Checking for exhaustive cases is done even in if-chain switch if all is enum #2828
- Constant shifting incorrectly doesn't flatten the underlying vector base #2825
- String not set as attributes resolved breaking has_tagof #2824
- Self referencing forward resolved const enum fails to be properly detected #2823
- Incorrectly try compile time int check on vector #2815
- Generating typeid from function gives incorrect typeid #2816
- Recursive definitions not discovered when initializer is access on other const #2817
- Slice overrun detected late hit codegen assert #2822
- Compile time dereference of a constant slice was too generous #2821
- Constant deref of subscript had inserted checks #2818
- Raw vaargs with optional return not lowered correctly #2819
- Early exit in macro call crashes codegen #2820
- Empty enums would return the values as zero sized arrays #2838
- Store of zero in lowering did not properly handle optionals in some cases #2837
- Bitstruct accidentally allowed other arrays than char arrays #2836
- Bitstruct as substruct fails to properly work with designated initializers. #2827
- Bug when initializing an inferred array with deep structure using designated init #2826
- Packed .c3l files without compressions weren't unpacked correctly.
- Lowering of optional in && was incorrect #2843
- Resolving &X.b when X is a const incorrectly checked for runtime constness #2842
- Alignment param on $$unaligned_* not checked for zero #2844
- Fix alignment for uint128 to 16 with WASM targets.
- Incorrect assert in struct alignment checking #2841
- Packed structs sometimes not lowered as such.
- Crash when creating
$Type*where$Typeis an optional type #2848 - Crashes when using
io::EOF~!in various unhandled places. #2848 - Crash when trying to create a const zero untyped list #2847
- Incorrect handling when reporting fn with optional compile time type #2862
- Optional in initializer cause a crash #2864
- Negating a global address with offset was a counted as a global runtime constant #2865
- Converting static "make_slice" to array failed to be handled #2866
- Narrowing a not expression was incorrectly handled #2867
- Vector shift by optional scalar failed #2868
- Initializer did not correctly handle second rethrow #2870
- Crash encountering panic in if-else style switch #2871
- Crash in slice expression when it contains a rethrow #2872
- Multiple issues when rethrowing inside of expressions #2873
Stdlib changes
- Add
ThreadPooljoin function to wait for all threads to finish in the pool without destroying the threads. - Add
@incompile-time macro to check for a value in a variable list of constants. #2662 - Return of Thread/Mutex/CondVar
destroy()is now "@maydiscard" and should be ignored. It will return void in 0.8.0. - Return of Mutex
unlock()andlock()is now "@maydiscard" and should be ignored. They will return void in 0.8.0. - Return of ConditionVariable
signal()broadcast()andwait()are now "@maydiscard". They will return void in 0.8.0. - Return of Thread
detatch()is now "@maydiscard". It will return void in 0.8.0. - Buffered/UnbufferedChannel, and both ThreadPools have
@maydiscardon a set of functions. They will return void in 0.8.0. - Pthread bindings correctly return Errno instead of CInt.
- Return of Thread
join()is now "@maydiscard". - Add
poly1305one-time Message Authentication Code and associated tests. #2639 - Add
ripemdhashing and associated tests. #2663 - Add
chacha20stream cipher and associated tests. #2643 - Add
BLAKE2(optionally keyed) cryptographic hashing with associated tests. #2648 - Add
BLAKE3XOF and associated tests. #2667 - Add
Elf32_ShdrandElf64_Shdrtostd::os::linux. - Add
any.toandany.as. - Deprecated
DString.append_chars, useDString.append_string - Deprecated
DString.append_stringfor DStrings, useDString.append_dstringinstead. - Added
DString.append_bytes. - Add
streebog(aka "GOST-12") hashing with 256-bit and 512-bit outputs. #2659 - Add unit tests for HMAC 256 based on RFC 4231. #2743
- Add extra
AsciiCharsetconstants and combine its related compile-time/runtime macros. #2688 - Use a
Printablestruct for ansi RGB formatting instead of explicit allocation and deprecate the old method. - HashSet.len() now returns usz instead of int. #2740
- Add
mem::storeandmem::loadwhich may combine both aligned and volatile operations. - Deprecated
EMPTY_MACRO_SLOTand its related uses, in favor ofoptional_param = ...named macro arguments. #2805 - Add tracking of peak memory usage in the tracking allocator.
- Added
realloc_array,realloc_array_aligned, andrealloc_array_trytoallocator::. #2760