Well, call me a skeptic, but I’m hardly convinced by the general direction C++ has taken. It’s really too complex, there is almost one keyword per new feature. Even then, too often, the proposed syntax is simply puzzling. The C++ committee members are smart people, so there were probably good reasons related to the legacy of C++. But still…
Consider for instance the template typedef feature. The following syntax just seems bizarre to me:
template< class T > using Vector = MyVector< T, MyAlloc<T> > ; Vector<int> int_vector ;
I can understand why a purist would want not to call it a “typedef”, since we are not dealing with a type but with a template. But using an equal sign to define a template, now that’s new… It’s not even consistent with any other template syntax.
In a sense, I’m really glad to no longer participate in the C++ committee. It’s not that I want to distance myself from committee members (I still have a few good friends there). But I really don’t want their job, it’s not fun to try to improve C++. It’s really tough, because the language is just too big and too inconsistent.
There are still some ideas that I like in there (with, in most cases, implementations I personally find ugly). I like to think that I had an influence on this: a few leading C++ committee members, including Bjarne Stroustrup, were very well aware of XL and concept programming. I know, because I wrote to them and argued about some XL features. This is only my opinion, Daveed Vandevoorde may not agree with me.
For example, I believe that variadic templates were not in the C++0x slides until after I sent an e-mail about the equivalent feature in XL in September 2001. Again, I may be wrong on this. It is also fairly possible that they were invented independently, if only because they had been in XL for a while (the linked test passed in August 2001, but the feature had apparently been implemented in August 2000). Actually, variadics is one case where C++0x influenced XL, because XL was using an other keyword at the time, which I replaced with ... after a discussion on the C++0x syntax.
But the case for “concepts” is a bit more annoying. I remember writing another e-mail where I tried to explain concept programming. I may very well have taken the example of what is called generic validation in XL. And maybe someone genuinely thought this was what I had in mind when I talked about “concepts”. Sadly, it is not. Concepts (in my original interpretation) are all about bridging the gap between the problem space and the code space. Specific language constructs are tools to implement concepts, they are not the concepts.
Unfortunately, I’m afraid that he future evolution of C++ will make explaining my ideas about programming much more difficult than today. Not that it was any easy today…