github c3lang/c3c v0.8.5
Version 0.8.5

pre-release5 hours ago

0.8.5 Change list

Changes / improvements

  • Fetching MSVC also optionally fetches C/C++ headers for cross-compilation
  • Experimental C backend.
  • Allow the @section attribute on local static variables.
  • Make $feat accept the same syntax as @feat.
  • Added @asmname, which is similar to @cname but does not add any normal name-prefixing on targets where that is normal (such as MachO).
  • Add --function-sections and --data-sections (function-sections / data-sections in project.json) to place each function or global variable in its own section, so the linker can discard unused ones #3051.
  • Removed experimental support for cenum, faultset and distinct alternative names.
  • Docs now use the constset, attrmacro and excuse.
  • The static Linux binary now uses mimalloc for faster codegen and is aliased to c3-linux.tar.gz.

Fixes

  • Regression for vec.pow(x).
  • Macros with "const" declarations were compile time folded despite needing the declaration.
  • Vectors created through casts in globals would miscompile, e.g. Foo global = { .v = (int[<3>])8 }.
  • Support $$bswap for all power of two integers, including single bytes (in which case it is a no-op).
  • Fix source locations for byte literal values continued on a new line.
  • Faulty selection of subscript operator overload when calling method #3499
  • Retain @nostrip on optimized code even if no use is found, static variables may now also have nostrip. #3500
  • != overloads on structs behaved as == #3547.
  • Multi-dimensional array comparisons on types with == overloaded would not compare.
  • Lazy resolution of function pointer types could cause a segfault when unifying ternary types. #3552
  • @swap now works with non-pure arguments.
  • Incorrect lowering of vectors when created from designated initializers with zeroes at the end.

Stdlib changes

  • Added std::gfx module.
  • Added IntRect, IntVec2, IntVec3 and IntVec4 types.
  • Updated organization of the MacOS / Darwin bindings, reorganized by framework, added many functions and split into std::os::darwin and std::os::macos, with among other things easy ObjC dispatch.
  • Updated win32 bindings with many functions, reorganized by header.
  • Cross-platform dylib handling with DylibHandle, os::dlopen, os::dlsym and related functions in std::os.
  • Added Duration.to_sec
  • Updated posix libc with shm_open, shm_unlink, truncate and ftruncate.
  • Add NonNull and Nullable types for members with mandatory null checks.
  • Cap durations and time to long::max/long::min with saturating maths.
  • Added time::FOREVER_PAST, Time::diff_years, Time::diff_months, time::day, time::week, time::month, time::year.
  • Added double.is_inf, float.is_inf.

Don't miss a new c3c release

NewReleases is sending notifications on new releases.