Andrei Alexandrescu wrote:
Walter Bright wrote:
Don wrote:
Well, if you ask the question "what's C++'s biggest mistake?" it's much more difficult. C++'s failure to specify the ABI is enough of a reason to use C instead, I reckon. It think it's an appalling, inexcusable mistake -- it guaranteed compiled libraries 20 years later would use extern(C), not extern(C++). And that's not the worst C++ mistake.

I'd be hard pressed to come up with C++'s biggest mistake. Perhaps it was failing to address the array => pointer conversion.

That's partially addressed by the ability to define somewhat encapsulated types like std::vector.

I agree that it is partially addressed by std::vector and std::string. But:

1. Those appeared 10 years after C++ was in widespread use, 10 years of wandering in the desert with everyone trying to invent their own string class.

2. It still reflects in the design of std::string, in that to preserve the 0 termination design, it makes severe compromises.

3. The glaring fact that std::vector<char> and std::string are different suggests something is still wrong.

4. The pointer-centric design resulted in std::iterator, and of course iterators must go!

Don's suggested lack of ABI is big, and unfortunately not addressed in C++0x. There are many smaller ones to follow... two that come to mind: using "<"/">" for grouping and argument-dependent lookup.

I would suggest a broader issue than < >, it is the willingness to require semantic analysis to successfully parse C++. < > would never have been used if that was not considered acceptable. Only later did the C++ community realize there was value in parsing things without semantic analysis, i.e. template bodies.

ADL was a fix for another issue, the asymmetric design of operator overloading. So I don't think ADL was a mistake so much as what C++ was forced into to compensate for a previous mistake.

Reply via email to