Very nice.<p>That said even C has already a way too rich and complex syntax. ISO is doing planned obsolescence with its syntax instead of fixing it, and no the linux kernel is not written in C, but using a gcc-massively-extended C dialect.<p>Then it needs discipline: c89 with benign bits of c99/c11/etc.<p>A good move is to write/use a C coded game engine, I wish godot was plain and simple C.
<p><pre><code> > deep cloning of data with simple assignment a = b;
> deep equality checks bool are_equal_by_value = memcmp(a, b, sizeof(some_struct_t));
</code></pre>
Errr, wat? We seem to have very different understandings of "deep" in this context. Neither of the above are "deep" in the sense that pointers within the struct will not be followed with their referenced data copied/compared. These are <i>shallow</i> operations.
Interesting read, thanks.<p>> <i>C++ is the obvious choice but the syntax and endless features overwhelm me. I’m not a fan of OOP for game development - class-heavy C++ was not the right move</i><p>You can well use C++ with a very modest style, even completely without OO if needed; C++ has many advantages over C for large projects; the type system is more mature and it offers very useful features for modularization and memory management (which were already present in C++98, so it's easy to get a working compiler on virtually all platforms where there is a C compiler).
Where's the source code for the game itself? The github page you linked to lists resources, and a Steam page for the game, but not the code itself. That would be the most interesting thing for HN, otherwise this just seems like a submarine ad for your game.<p>If you're going to use FOSS code for your project you should release it as such.<p>That said, congrats on releasing. I play around with C a lot but couldn't imagine sticking with it long enough to finish something bigger than a library.
<p><pre><code> bool are_equal = memcmp(&a, &b, sizeof(some_struct_t));
</code></pre>
Isn't this a bug? Structs are allowed to have padding bytes between bytes occupied by fields, which will have unpredictable ("garbage") values. So a pair of structs with all fields pairwise same can have different padding bytes, so checking equality with this method will give a false negative.
Nice, thanks for sharing!<p>If you don't like C++ because of classes and clutter, would Rust be a viable alternative (asking because I have not much experience in C and in Rust, so maybe if I ever try to write a very simple game engine, I might like to try in Rust)?
I don't understand why you would use C over C++ for anything other than random embedded devices where you have very intimate knowledge of the hardware. I guess you just really hate any hint of a type system?