2025-10-04
The C3 programming language continues its steady evolution with version 0.7.6, focusing on quality-of-life improvements and language refinements While previous 0.7.x versions have seen some notable additions to the language itself, 0.7.6 only adds a few minor features, with nothing new planned for 0.7.7. Originally the inline asm updates and fixes were scheduled for 0.7.6, the discussion around the semantics took too much time for it to make it to 0.7.6.
In other news, C3 is now tracked by Linguist on GitHub which means code on GitHub will finally have highlighting for C3 files.
lengthof() - The new lengthof function provides a unified way to use the result of the method or function tagged @operator(len). For builtin types with length, such as arrays, this will lower into a .len field access. This allows building macros that leverage @operator(len) without having to use foreach.#! comments on the first line, simplifying using C3 code in scripts.List{int} x = list::NOHEAP;.+++= operator - This complements the +++ compile time concatenation operator to make code that use repeated concatenation shorter and more concise.$defined - $defined now also supports $nameof, $offsetof and $alignof, so that the code can query if the builtins are supported for the particular argument. This is particularly useful for lazy arguments.== operator overload can now be properly compared when used in slices and arrays.env::PROJECT_VERSION. It reflects exactly the string in project.json.[] indexing and both forward and reverse foreach iteration (#2438).path module.io::skip for skipping data and little-endian family for read/write operations io::read_le, io::write_le.CVaList.This release wouldn’t have been possible without the incredible C3C community. The collaborative effort in identifying, reporting, and fixing the numerous issues addressed in this release exemplifies the strength of the C3C development community.
The C3 team remains committed to creating a modern, safe, and fast programming language that doesn’t compromise on the low-level control that makes C so enduring. Thank you to everyone who has contributed to making this release possible!
$alignof, $offsetof and $nameof can now be used in $defined.List{int} x = list::NOHEAP.env::PROJECT_VERSION now returns the version in project.json.+++= operator.foo(x()) ?? io::EOF? causing irregular crashes.--quiet #2465?? with void results on both sides cause a compiler crash #2472..ordinal from an enum passed by pointer and then taking the address of this result would return the enum, not int.foo.bar = {} when bar is a flexible array member. #2497int[*][*] #2505$for int $a = 1; $a < 2; $a++ would not parse.if did not work properly.std::crypto::aes.InterfaceList to store a list of values that implement a specific interfacepath::home_directory, path::documents_directory, path::videos_directory, path::pictures_directory, path::desktop_directory, path::screenshots_directory,
path::public_share_directory, path::templates_directory, path::saved_games_directory, path::music_directory, path::downloads_directory.LinkedList array_view to support [] and foreach/foreach_r. #2438LinkedList printable and add == operator. #2438io::skip and io::read_le and io::write_le family of functions.Check out the documentation or download it and try it out.
Have questions? Come and chat with us on Discord.
Discuss this article on Reddit or Hacker News.