Using old compilers

By an interesting coincidence I happened to be searching for a few new C++ blogs to follow and I also happened to have just updated this entry about Stan Lippman’s VC6 rant (since I found a link to the original posting which had been deleted before I could comment on it back in 2005…).

Anyway, back to the point, The Lone Coder asks “Why oh why do people insist on using compilers that are way out of date?”.

My answer is pretty much the same as back in 2005; clients often require that code builds with older compilers and that can tie you to the abilities of the earliest compiler that you need to support. So, although I no longer have to support VC6 for the majority of development and whilst most new development is done in VS2008, I still need to be able to build in all the old compilers that my clients require. Sometimes it’s easier to do the day to day work on the least capable compiler and then make sure the code builds on the rest and sometimes it’s easiest to do the latest work on the latest compiler and then make sure it builds with the rest. Continuous integration helps with all of this.

Back in 2005 I tended to work in VC6 and then test compile in everything else because the IDE was familiar and fast, because the later compilers (well, IDEs actually) just weren’t as productive for me as VC6 was, and because the later compilers could take a VC6 project and convert it to their format whereas none of them could convert BACK to a VC6 project… Once VS2008 came along I found I was a) more productive in it and b) it was just better all round, so I switched to that for day to day development and put up with the pain of manually maintaining the project files.

Even when you only need to support your own code it’s often not easy to move up to the latest and greatest tools. Sometimes it’s non trivial to schedule a ‘we compiled everything with a new compiler’ release as the testing and release requirements may be greater than for a ‘we just fixed this small issue’ release (I’m not saying that the testing requirements should be different, just that for many clients they are).

And finally, sometimes it seems that developers just want to play with new toys… Sure it’s nice to be able to use a newer compiler but not every project needs to use the latest tools and not every project can afford to add the time and risk of changing toolsets into the schedule.