Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

I understand why C++ is used. That is not what this question is about.

When I install games, commonly Steam (I pretty much only use Steam these days) will install the C++ 2005 Runtime distributable.

My question is why is this the case? What is the reason a runtime released over 8 years ago is still prevalent? Some of the games I've installed recently are slightly older, so assuming a couple of years dev time you could make the case it was the tried and tested standard at the time.

Why do game companies not use a newer version of the VC++ runtime?

share|improve this question
1  
It would depend on the game, but consider how much C++ has changed since 2005. Not a lot. If the package still offers useful functionality, there's no reason to replace it with something else. –  Byte56 Jul 18 '13 at 18:48
9  
I'd like to refute the claim that C++ hasn't changed much since 2005, with the subsequent release of C++11 and the working changes of C++13/14, incorporating things like lambdas, smart pointers, move semantics, and threading into the C++ Standard Library. –  Shotgun Ninja Jul 18 '13 at 19:07
    
That's an interesting one. My area is .net, c# mainly and if you look at the changes that have arrived since .net 2 (2005), a lot of developers are still only now coming to grips with things that were added in 2008 (lambdas are a good example) let alone 2010. So there's always that disconnect between what is available and what the majority actually use of it to get their work done. Edit: Just to add, I interview a lot, both for roles and for people to fill out my teams. I tend to use that as a good yardstick for what people are using of what is available. –  Ian Jul 18 '13 at 19:11
1  
This doesn't feel like a problem in search of an answer. Why are you presupposing that it's "preferred"? –  Tetrad Jul 18 '13 at 20:33
2  
@bobobobo: range-based for loops are available in GCC and Clang and have been for years. They're hardly the biggest change in C++ either, just like auto - as handy as it is - is hardly the major fundamental game changer of C++11. Lambdas, constexpr, rvalue references, variadic templates, template aliases, defaulted and deleted functions, default template arguments for function templates, and so on are all way more valuable and drastic than range-based for loops. Also, those are all language features that can't be provided by just boost. –  Sean Middleditch Jul 19 '13 at 3:57

1 Answer 1

up vote 16 down vote accepted

Companies don't upgrade VS willy-nilly. We're using 2010SP1 for instance on a project not planning to ship for several years. Using a newer version would mean buying new licenses to the IDE, possibility buying new licenses to plugins we use, and of course risking some show-stopping bugs that haven't been worked out. We already paid for 2010 and know 2010 will work for our needs though.

I admit it annoys me at times; I really would like the newest C++11/14 support, AMP support, and improved optimizations, but that kind of "upgrade to the new shiny" mentality doesn't mesh well with larger, more serious projects.

Most corporate entities are very, very conservative about updating any piece of software, be it Visual Studio, Office, Windows, Perforce, whatever. While Visual Studio 2005 usage is pretty rare for games today, 2008 is still pretty common. Very very few are using 2012. It's quite possible that uptake of 2012 will never happen en masse and that the next popular version of Visual Studio will be 2013 or 2014.

See for instance how rapid the common enthusiast-oriented Linux distro updates versions compared to the release cadence of Redhat Enterprise or Ubuntu LTS. Home users and hobbiest can more easily justify upgrades and enthusiasts often clamor for them, but businesses typically want as little change as possible.

Another factor today is XBox 360 compatibility. It's silly to buy and install two versions of the IDE/compiler if you need one in particular for XBox compatibility. Which next version of VS becomes popular for games will depend largely on which compiler the XBox One recommends for the release versions of its devkits (2012 is used for the beta devkits used for launch games, but 2013 might be recommended down the road for post-launch titles).

In terms of the runtimes used by the compilers, these must match exactly with the compiler in use. Part of this is because of how C and C++ work. Interfaces are defined by header files, which are really just a fancy way to do cut-n-paste. Consider exhibit A:

void foo(char* name, int length);

And now consider exhibit B:

void foo(int length, char* name);

If these C functions were included in two different versions of the runtimes, they've both be symbol _foo but the code compiled to use one would clearly not work for the other. While the compatibility problems are generally a bit more involved and subtle, the end result is still the same: code compiled with VS2005 will have header from VS2005 which only describe how the VS2005 runtime works. VS2012 ships with entirely different headers targetting an entirely different runtime.

Microsoft does not support targetting older verions as that would really just be a pain. They'd have to ship and then continue maintaining old headers in addition to the runtimes. There's relatively little reason for it as good DLL usage practices in Windows allow developers to mix libraries using different runtimes. If you have VS2012 you can still link against libraries made with VS2005, so long as you and the library follow a few easy rules.

Platforms like GNU/Linux go through some effort to avoid these issues, but have gone through them, sometimes at a much deeper level. I still recall the libc5 to glibc transition, or the frequent libstdc++ breaks of the time (this is one reasons Linux/UNIX developers have remained relatively cold on the topic of C++ over the years).

Windows does ship with a low-level "generic" C runtime called MSVCR.DLL, though each version of the compiler include its own replacement e.g. MSVCRR110.DLL. You can go to effort to use only the generic version but it is missing a great deal of functionality, including most of the C++ support routines that change with each version of Visual Studio (and its ever evolving support of C++). It's generally not worth the effort and lost functionality unless you're really trying to make a zero-dependency application (recovery tools, OS tools, security tools, and so on sometimes fall into this class).

In short, each Visual Studio has its own runtime library, and application compiled with that version must use. Games will typically be written using less than the most cutting edge compiler and hence will require an older runtime.

share|improve this answer
2  
I relate to that. I develop in banks .Net stuff, and up until last year I would still occassionally end up with a PC running XP :/ Generally though, for development tools we're generally never more than one version behind. I'd posit 80pc of banks are using VS 2010 and framework 4. I had considered 360 development as a part of the reason, thanks for the confirmation. –  Ian Jul 18 '13 at 19:09
    
I'm actually unsure about the XBox - VS2012 might work just fine for the 360, dunno. –  Sean Middleditch Jul 18 '13 at 20:05
    
VS2013 (at least the preview version) apparently requires Windows 8.1, so that might cause developers to stick with VS2012 for awhile, as most people I know really aren't keen on switching to Win8... –  Nathan Reed Jul 18 '13 at 22:16
    
@NathanReed: it most certainly does not. Some of the newer graphics debugger engine features only work on Win8.1, as they require some core WDDM changes, however it just uses the old engine on older copies of Windows. I've used it for a couple weeks now at home on Windows 7 no problem. –  Sean Middleditch Jul 18 '13 at 22:39
1  
@Ian: Expanded answer to address your runtime questions –  Sean Middleditch Jul 19 '13 at 2:14

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.