Hello guys,
first of all: a huge Thank You to Casey for doing this. I missed the C64/Amiga coding train when I was young, and then fell into the scripting wagon in 1995. These days as one might expect (and for the past 15+ years) I've been a web developer for a living. You have no idea how much I hoped in the past that this gift of knowledge could be given by someone that walked exactly the path you did back then.
I'd like to introduce myself, and ask a few questions!
To this day, I implemented my own engines (purely for the need of knowing and for fun) in JavaScript, C# and Java, in that order over the years, because I had to go from the language I was most familiar with, and free my brain from having to figure out HOW to implement a feature in good code, while learning what was needed to solve a specific problem (say path-finding in a grid with A*).
Every change of language was driven by the availability and quality of knowledge on the topics at hand (man, java programmers are into gaming! that language has the most amazing collection of good quality writing/tutorials/examples on how to accomplish almost anything when it comes to game engines).
My quest was one towards the freedom to turn my ideas into my own implementations, without compromising on performances and features. Every push forward always had me look at C with envy, when my ray caster implemented in C# or Java would under perform compared to say the one implemented in native code inside libraries like Box2D (same implementation, single threaded in all languages and external libs).
Before I started with your sessions I had a general idea of how things worked, but absolutely ZERO clue on how to wield the power of C/C++. I might be a strange case:
I studied CPU Design in school, back in the 90ies, when we sprinkled ASM inside Turbo Pascal sources, so I am familiar with endianness, memory layout and machine code instructions (although I never programmed x86, back then we used to code on Z80 processors slapped on breadboards :D).
In other words, while I have zero issues with the concepts of pointers, bit-wise operations and memory read/write/allocation/deallocation, I have absolutely NO KNOWLEDGE whatsoever of what it means to write a program in C/C++.
And here comes my question:
We are writing code in a cpp file, and you mentioned that you only ever use function overloading and "few other features" from C++, while the rest is standard C. To me that distinction is a very blurry line, not knowing what other differences are there between the two languages.
Can anyone point to a good (as in "complete") reading material on the topic, so that I can at least have a clue of which parts of the two languages we are using while we write the code?
So far in my mind I can only make distinctions when I see the following:
void *pointers -> C++
function overloading -> C++
classes -> C++
everything else, as far as I'm concerned, could be either!
I thank you in advance for any answer you might push my way, and all I want to say again is Thank You for this, to Casey and to the whole community that has built around Handmade Hero. It feels absolutely great to be here!
Cheers!
Luca
P.S. Casey, watching you use MSDN makes it look so easy! I could hardly ever find what I needed in there, and it was in no small part the reason why I never got into C/C++. You proved that if you know what to look for, that documentation is well made. Which again reinforces the pure awesomeness of this project!