
This is the first time I’ve been able to build DriveyC++ in more than two years… thanks largely to an idiotic decision to refactor my codebase back then, when I simply did not have the time to do it properly and so ended up breaking everything. Refactoring is something that many programmers, including myself, feel a compulsive desire to do sometimes. It’s like rearranging the furniture when you’re procrastinating, only instead of ten items you find yourself moving thousands of things, as well as renaming them. So now the chair that was in the corner is called furniture::seat and for some reason ends up in the laundry. Also, because so many changes are made in such a short time frame, you inevitably make terrible mistakes which cause everything to stop working. Usually these are caught and fixed relatively quickly, but if you make all the changes and then immediately stop working on it you get to come back in two years and say WTF! and wonder why nothing seems familiar and even the most basic shit has stopped working.
Couple that with some insanely complicated meta-programming and jumping a few VC versions and you get the situation I have with Jujuscript (and therefore the original Drivey demo) where you have no idea why something was working before and not now (and sometimes it’s hard to see how it even worked in the first place). Is it because of subtle version differences in template argument parsing? All I know is that when I reference an array element in Jujuscript it now shows up as a generic R-Value instead of a typed L-Value, and I’m yet to get to the bottom of it, but it means 90% of my scripts no longer work.
The moral of the story: don’t change several things at once, and don’t refactor unless you have time to follow up and iron out the brand new set of problems this will introduce. Also, just because you have namespaces doesn’t mean it’s ok to use the same type name for different objects– at some point this will bite you in the ass.