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.