Releases: sparky-game/carbon
v0.13-alpha
In the printing functions and macros, we upgraded from a runtime ternary operation with type identification for mapping type and printf-style specifiers, to a fully compile-time procedure, using _Generic
in C and templated and overloaded constexpr function in C++.
Improved and refined coroutines API; there's no longer the need to explicitly initialize and shutdown the feature! 🚀
Simple example in C++:
carbon_println("[%zu] Hello, World!", carbon_coroutine_id());
carbon_coroutine_go([](void *){
carbon_println("[%zu] Hello, Async!", carbon_coroutine_id());
}, 0);
carbon_coroutine_yield();
Also, as always, we polished some code, fixed some bugs, documented some undocumented things... you know, usual stuff. 😸
Full Changelog: v0.12-alpha...v0.13-alpha
Note
carbon-0.13-alpha-macos-aarch64.tgz :: 659eb2b35ae979ca59a5f1d9561e020968f2b62a86e19312384615cbc55dcd52
v0.12-alpha
We even can display graphics! 😸
Polished also some code, and fixed some bugs... Documentation (in the header file itself) is also getting there 😅
Furthermore, now, on the prebuilt packages, we don't ship any implementation nor vendor source code whatsoever; all's included in the actual prebuilt static and dynamic library files. We've made sure all works fine in that scenario (obviously, without needing to define CARBON_IMPLEMENTATION
macro, because we don't have any source code! Duh 🙃).
Full Changelog: v0.11-alpha...v0.12-alpha
Note
carbon-0.12-macos-aarch64.tgz :: 2f25f81d5631b39d70801cd840a64d50db4cfe430b281bc06b40db97d24a62f2
v0.11-alpha
We're getting beefier, and that's great!
We highlight from this release the new coroutines API to do asynchronous work super easily in pure C. Try it out now! 😄
Full Changelog: v0.10-alpha...v0.11-alpha
Note
carbon-0.11-macos-aarch64.tgz :: bb5508e442030bc1d3022db063edbeb1aa0b9770949362a7ad324c49244167ba
v0.10-alpha
C with string interpolation? 🤔 No more confusing format specifiers? No way! 😮
Yeah, Carbon is that great 🎉
const char *name = "Wasym";
const u8 age = 23;
carbon_println("My name is %$, and I am %$ years old", $(name), $(age));
As you saw, we're using these 2 new things:
%$
placeholder: in the same old printf-style, these automatically can infer the type of the variable, and use the appropriate formatting for it. Obviously, you can still use the specific format specifiers if you prefer to do so. 😉$(...)
boxing macro: these are used to wrap around the variables you want to print using the%$
placeholder. As C cannot do any reflection or compile-time type manipulation, we need to do the work at runtime with this handy-dandy macro. 😎
Warning
The $(...) boxing macro only works with lvalues, i.e. variables stored in a way where its address can be retrieved with the &
operator.
Also, logging functions have been reorganized (carbon_log_info
, carbon_log_warn
, carbon_log_error
), which uses our string interpolation mechanism under the hood.
Full Changelog: v0.9-alpha...v0.10-alpha
Note
carbon-0.10-linux-amd64.tgz :: 4f4021abf61bc41a82491b40f4118185a2766dd069f895742f8e0e7e8d2997d9
carbon-0.10-macos-aarch64.tgz :: a8b6043a1d03da75af1b40941945f0cb8233db2c41e6e21816d94767bd12bdf1
v0.9-alpha
🚀 The stdlib of the future!
- Improved math module with more from-scratch functions implemented.
- Created both
StrBuilder
andStrView
structures to better create, manage and use strings. - Included
stb_image.h
header-only external library to read images into a tensor structure (a list of matrices of pixels, one matrix per channel in the image, e.g. RGBA). - Added
foreach
constructs for containers such asList
orStrList
, to better simplify iterating on such data structures. - Changed license terms and conditions to a definitive setup: GNU AGPL-3.0-only + Carbon Runtime Library Exception (RLE). More information both in the README and in the website.
Full Changelog: v0.8-alpha...v0.9-alpha
Note
carbon-0.9-linux-amd64.tgz :: e13d1bf3f41282a0a0a4483acf48ad7e573997c2a58553f31880f8fafaeecea1
carbon-0.9-macos-amd64.tgz :: a511b9cc7836627411fa0323ca46b4af03b22113d1829f430ae353a34307b812
v0.8-alpha
Carbon doesn't just help you test your code, it also offers a way to write full-fledged high level C!
These are all shipped modules:
- Assert
- Math
- Crypto
- Logging
- Should
- Time
- Clock
- Filesystem
- List
- HashMap
- String
- StrList
- NeuralNet
- TestManager
- JUnit
Full Changelog: v0.7-alpha...v0.8-alpha
Note
carbon-0.8-linux-amd64.tgz :: e0d04712480e4e4fa9376f9ad06395f8fc1cac5c5c1103da9860199771cd2441
v0.7-alpha
Now it can rebuild itself! 🎉
If one of the translation units compiled into the binary changes, upon execution it will rebuild itself and swap the program flow to the new code.
Warning
If you create a new *.c
file (translation unit), it won't pick it up, you'll need to recompile manually the binary adding the new file to it.
Full Changelog: v0.6-alpha...v0.7-alpha
Note
carbon-0.7-linux-amd64.tgz :: cb5a18429ce1accfe3ec1a53cfeef3e87dd3bb945d4190d4cb77fa0f788a6ea6
v0.6-alpha
Implemented test discovery functionality! 🎉
Carbon automatically discovers and registers your tests, eliminating the need to manually do all of that work. Now, the process of creation and auto-registration of a new test case is done with the CARBON_TEST(ctx_name, unit_name)
macro.
ctx_name
refers to the context/module/class of the codebase the new test case belongs to.unit_name
refers to the actual name of the test case itself.
Full Changelog: v0.5-alpha...v0.6-alpha
v0.5-alpha
- Added CLI argument parsing. First flag as of right now is
-o
/--output
, which enables the user to change the output file for the JUnit XML results file (by default remains ascarbon_results.xml
). - Because the last point has been implemented, it has been added both a help/usage panel (
-h
/--help
) and version information (-v
/--version
).
Full Changelog: v0.4-alpha...v0.5-alpha
v0.4-alpha
- If
carbon.h
gets included into C++ source code, it disables name mangling for all of its symbols, as it's expected in C (i.e.extern "C"
). - Added several new assertions (for integer types):
<
,<=
,>
,>=
. - Added
CARBON_OK
andCARBON_KO
macros to denote test status.
Full Changelog: v0.3-alpha...v0.4-alpha