>>83
I understand better what you intended to mean now. However, doesn't it sound paradoxal? That is: if the community has indeed directed the language development, why does the community criticizes it so badly?
I still personally believe that the true C++ community, and the true
programming community for that's sake, is totally apart from the people who actually decides things for the language. This must happen in many committees, but this is specially true in the C++ case, because of the problem of the economical interests I've proposed. Anyway, that's only my personal opinion on the matter.
>>84
Nothing could be further from the truth. First, why shouldn't C++ be used by people which don't care about performance? As I stated, C++ wasn't designed with straight performance in mind, but rather implementation simplicity in the lower level. Even in the frontend level, writing a template is not harder than writing a complex C macro which would perform the same task, writing a class hierarchy is not harder than writing the same hierarchy in parallel languages, and applying "expert" techniques and practices is not at all needed to write a good, working piece of code in C++. The lack of libraries, indeed, is an inherent problem, but there are excellent C++ frameworks out there; Qt is one which comes to my mind. The bottom line is, C++
can be (and should be) used by "normal", "non-expert" people.
Second, why does C++ make it much more difficult to properly profile code?
Profiling C++ code is not much different from profiling C code, maybe except in areas where templates are involved -- but templates are usually restricted to some specific parts of the program, mostly containers and special pointer types. Using them in most other situations, as I have stated, is indeed a symptom of premature optimization, and it's comparable, in form and content, to abuse C macros which generate syntax. (Curiously, one can't easily debug or profile easily those macros also: even the compiler will mess up the error message line numbers when compiling a macro which has expanded to invalid code.)
Profiling is, in general, difficult to perform, independently of the language; however, once more, C++ doesn't make it specially harder. Most arguments in this aspect denounce things like, "syntactically one can't know whether a sum operator was overloaded into a O(n2) operation"; however, no
sane design does that; no sane design binds semantics to methods and operators too far from what they're subjectively intended to mean, and if the operation is costly, no sane design would hide that fact under a "convenience" disguise. This is not specific to C++ either.
>>103
I understand the need for a garbage collector when writing functional code, and it is legitimate. But the Blub argument, for me, is not.
First of all, the entire idea of people "not knowing they need something", or "not knowing they could use of some other thinking paradigm or technique" is faux. Assembly language programmers know they could use of some more parsing power. C programmers know they could use of some more metaprogramming facilities, or some more object-orientation techniques in some cases. C++ programmers know they could use of some garbage collecting, or some sort of automatic memory management. Java programmers feel the need for proper closures when such a need really appears. People with some experience know what they need, when they need it, even when they're unaware those techniques already exist elsewhere: that's the root cause of the creation of language "idioms" in programming communities. Many newcomers to the programming world quickly "invent" simple data structures, such as linked lists and trees, without having ever touched computer science literature.
Second, pushing "new paradigms" to people is, at the best, an argument against simplicity and minimalism. At the worst, I would say it is an extremely pedantic way of selling "dreams" to people, dreams of developing awesome productivity, or of developing a revolutionary mindset. I go to an extreme and claim that it is even right-winged in the sense that it inevitably culminates on the always implicit idea that "everyone thinks the same, and I'm special because I don't". Not really: people are not completely stupid. Java programmers are not stupid because they don't know all the power Lisp macros offer, or all the power monads and zygomorphisms in Haskell offer, or all the power C++ templates offer. They're not bound to an "inferior" mindset because their language has less "power" (which is,
par excellence, an extremely subjective aspect) than others. Needs grow outwards, and are not pushed inwards someone.
Lastly, I'll develop a little this "powerful language" part. A "powerful" programming language to one person is a terrible language to another. Ask Steve Hutchessen or Randall Hyde about assembly programming and they will be quite comfortable to claim it is the most powerful language around, unbeatably. Ask Paul Graham, he'll defend Lisp. Ask Stroustrup, he'll naturally claim for C++. Are they wrong? Are they lying? These people are not stupid, and don't work on simple summer projects. Each one of them does have a strong point to make. Apart this, there always will be people who claim something is better than something else, and will even appeal to intellectually elaborate arguments (such as the Blub argument) in order to convince, or maybe make feel people uncomfortable about the subject. Objectively speaking, each one of the most popular languages have good, clear and mensurable traits, and bad ones also. So does C++, albeit I feel these traits are never brought up to surface precisely due to the amount of bashing between programmers claiming the poison they've picked are better than the others'.
Claiming something is absolutely superior to something else almost immediately proves not raw stupidity, but rather a degree of narrow-mindedness.