After four long years in the wilderness of C and Java I have finally returned to C++. It's quite a relief, but also quite humbling. It's amazing what you forget, and even worse forget that you've forgotten.
There was an article in Communications of the ACM a couple of years ago about ignorance. In typical ACM style they presented a model comprised of the five orders of ignorance. I'd hoped I was at the first order of ignorance: I knew that I didn't know something. But, it turns out that I'm a second order ignoramus. I don't know what I don't know. The fifth order of ignorance, meta-ignorance, is the ignorance of the five levels of ignorance. I suppose that you, dear reader, may not have been aware of the five orders of ignorance, so perhaps I just pushed you up up a level.[ Armour ] I stopped being a fulltime C++ programmer before the Standard was even completed. So, in an attempt to reeducate myself rapidly I have turned to my bulging bookshelves of unread and part-read books. Placing my C++ books in order of purchase I skimmed through many until I encountered Scott Meyer's Effective C++. What a superb book that is. On my first reading many years ago it all seemed pretty obvious stuff. After four years of brain rot I now hang on every word. For example, I'd remembered that you can't overload the return type of a method, but I'd forgotten that you can if they differ only by const-ness. In my code I'd written methods for getFoo and getFooAsConst. I now have lots of improvements to make to my unimpressive code.
Emerging from the wilderness I expected all to be lush and right and good in C++-land. But I immediately bumped into a bunch of quite depressing problems.
iostream and iostream.h - You've got to chose between them, which is fine. But sometimes some third party code will make the choice for you, and they may make the right choice for them (portability) and the wrong choice for you (conformance).
Templates - The compiler I'm using just doesn't have a very happy time with some of the more sophisticated aspects of templates. Is it partial specialisation that is the problem? Sure they're hard to understand and implement, but it's been four years.
Ancient STL - The STL that ships with my compiler has copyright notices that date from 1996. That's partly due to an old legal argument that had nothing to do with the compiler vendor, but surely they could have just got one from somewhere else, or written their own. The compiler just can't handle a more recent implementation of the STL because it can't cope with a more 'modern' implementation.
Of course I'm writing about the Microsoft compiler here, which has always been notorious for its lackadaisical attitude to language conformance. The good news is that version 7.1 will fix most of the serious conformance problems and should be shipping within a year. Coupled with this, Stan Lippman has just joined the team and has declared that one of his top goals is to bring that compiler as reasonably close to the Standard as possible.[ Lippman ]
In my pursuit of a conformant development platform I've been exploring the domains of independent and open source software. From comments I've read recently the Comeau C++ compiler appears to be the most compliant compiler available, and is only deficient in that it does not quite yet support the slightly esoteric 'export' keyword. It's also priced at an amazingly reasonable $50.[ Comeau ]
After four years of reading draft articles, helping authors, and the editing of Overloads 31 and 32 Einar Nilsen-Nygaard has decided to resign from the Overload editorial team. His contribution has been, and is greatly appreciated, and we wish him well with his future endeavours.
The advantage of having an editorial team work on Overload is that the workload of each issue can be spread over a number of shoulders. With work and life schedules being so hectic each of us is often willing to make an effort, but is only able to do so in occasional spurts. Having a team smoothes out these bumps in the road, by providing an avenue for a voluntary contribution without the commitment to any particular level of contribution or schedule. With that introduction I'd like to ask someone in the Overload readership to step forward and join the team. Please email us if you'd like to contribute in this way to your journal.
As this issue of Overload will be the last published in 2001 I want to publicly thank all those authors who over the year have contributed their time by writing engaging articles. Thank you - Thaddaeus Frogley, Francis Glassborow, Pete Goodliffe, Michael Gradman, Alan Griffiths, Kevlin Henney, Jim Hyslop, Corwin Joy, Allan Kelly, Steve Love, Dave Midgly, Antony Pinchbeck, Mark Radford, Oliver Schoenborn, Julian Smith, Detlef Vollmann, Josh Walker, Rob Weltman, Anthony Williams, and Simon Wilson.
[Armour] The five orders of ignorance, Phillip G. Armour, Communnications of the ACM, October 2000, Volume 43, Issue 10.
[Lippman] http://www.microsoft.com/PressPass/press/2001/Oct01/10-19lippmanpr.asp - Stan Lippman joins Microsoft.
[Comeau] http://www.comeaucomputing.com/ - Comeau C++ Compiler.
[stlport] http://www.stlport.org/ - STLPort Standard Library Project.
[boost] http://boost.org/ - Free peer-reviewed portable C++ source libraries.