Just looking for some opinions on the next standard. What do you guys think of #embed and constexpr? Will you be using C23 or sticking to an older standard like C99 or C89?
Just looking for some opinions on the next standard. What do you guys think of #embed and constexpr? Will you be using C23 or sticking to an older standard like C99 or C89?
I would most likely be using C11 for
threads.h
andstdatomic.h
for foreseeable future, the problem with using the latest and greatest standard is the risk of compiler not supporting it, so I would likely wait at least 5 years before switching to C23 sometime in 2028 or 2029. There was a bit of a controversy around optional bound checking in C11 that they end up removing/deprecating it, I am sure C23 would have something going on.I don’t plan on using #embed or constexpr in favor of maintaining common C programming practices, language familiarity is still an important factor to thriving project as much as people nag on me to rewrite everything in Rust or C++.
I do prefer C, due to its simplicity alone. I think that rewriting programs in Rust, or C++, just because “they are better” would be an unwise descision.
Don’t get me wrong, I do believe they are great languages, however, sometimes you must count your merits, and choose the best tool for the job.
Yep, biggest reason why I chose C language is Foreign Function Interface. Code you write for C is more than likely to be usable in just about any other languages.
Yeah but you can achieve this with Rust as well with
extern "C"
and#[no_mangle]
(I couldn’t really go back to something like C anymore IMHO, all the high-level language niceties and a really good static type system, while maintaining the power of C…)I don’t think so on the extensibility aspect alone, some of the Rust syntax/trait does not map well to other languages when other languages attempts to extend Rust library. I write C code in a way that it would be extensible from any languages.
Sure, but I think it’s rather shows the shortcomings of C IMO, I could write C like Rust (
no_mangle
everywhere), and achieve the same, but than I would miss out a lot of the nice features of Rust that are missing in C (among one is better automatic compiler optimizations (e.g. vectorization, better byte-packing of structs etc. not even starting with all the functional features). I don’t think it’s really an issue, you can get fancy within the Rust crate, and build a C compatible interface on top, that are just wrapper functions, and you likely think more about the API/interface to other languages which is probably not a bad thing, while having an idiomatic API for other Rust crates.But I agree, that it works better to just stay in the ecosystem of Rust (you can provide a nicer API/interface for your crate with generics/traits etc.).
Anyway I don’t completely get what you mean with “extensible from any languages”?
It just rooted back to my frustration when I was trying to fill in missing implementation details on projects like Skia (at the time it lacked support for Vulkan.) My very fundamental core belief is that for core libraries like say, Skia, Neural Net Framework, and other crucial projects like that should offer a way in C API that allows every type and implementation to be extended upon by any other language that can interface with C API by providing your own VTable or whatnot.
One of the approach I do for my GUI Toolkit written in C (specifically on Linux to replace QT and GTK) was making a single inheritance object oriented programming in C.and if you insert the base class type structure at the top of your custom struct type and provide your own VTable for those objects, you can readily extend the underlying library natively in whatever programming language you use assuming it can talks to C API in a complete sense.
Let me know if you want a demonstration of this, I would be happy to find the time to set up a small sample to give you the idea on how it’s done.
And I am also aware of the criticisms on those approach, verbosity of attempting to implement object oriented programming in C is kind of absurd and the API coverage would balloon. That is largely why I work on a Compiler-Generator Framework specifically to address the challenges by allowing me to add dialects on top of C Language such as generic, object oriented programming, and various dialects. I brought C closer to C# in term of syntax and features and at the end of compilation, it still produces readable C language code output and it also generates what I called an FFI-JSON. It’s essentially a JSON file that describes all of the types used in a C project, the sizes of integers/floating points, structure types and it’s fields/offsets/sizes comments, and function declarations. It’s done in a way that you could read the JSON file and generate your programming language binding library saving you weeks of work.