github c3lang/c3c v0.8.3
Version 0.8.3

pre-release4 hours ago

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 @feat attribute, deprecate @if on non-generic top level declarations.
  • Add $feat compile time function. $feature is 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 lgdt and lidt instructions to x86 inline assembly.

Stdlib changes

  • LinkedList and Deque added a prepend method.
  • Added FixedList.is_full() method
  • Rect.contains_point is now exclusive on the maximum edge.
  • Add Bounds - a rectangular region stored as a min and max value, with all operations being inclusive along the boundary edge.
  • Experimental regex support.
  • Improved RFC 3986 compatibility.
  • JSON unmarshaling support, json::unmarshal and family.
  • Object unmarshaling support, object::unmarshal and family.
  • json::temp_load deprecated in favour of json::tload.
  • Object::is_map now returns true for empty objects.
  • Add range::upto, range::inclusive and range::exclusive macros.
  • Add io::read_buffer.
  • DateTime enable comparison operators.
  • Add Range.to_array and ExclusiveRange.to_array methods.

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_all was appending in the wrong order.
  • BitSet.len would yield the size of the underlying type, not the length.
  • RFC3339 formatting would yield incorrect value for microseconds.
  • --obj will always retain the object files. #3380
  • ThreadGroup with function returning void was broken.
  • Timed tcp::connect always failed with io::GENERAL_ERROR instead 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 _erff invoked C erf function instead of erff function #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 \v as 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 = true failed to compile.
  • $foo += 1 would not do a copy, leading to incorrect update of $foo. #3400
  • foreach (foo::Type t : x) would not parse properly. #3423
  • Docgen improvements and fixes: emit attrdef declarations/docs, include alias doc comments, render @return contracts, exclude compiler_rt when --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_all didn't handle split data.
  • Scanner would not correctly handle chunked data.
  • Gzip reader 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

Don't miss a new c3c release

NewReleases is sending notifications on new releases.