> * Because manual memory management is a mess. > > * Because some data structures and algorithms (red-black trees, for a > classic example) are extremely cumbersome in C compared to other > languages.
Hiding complexity from a programmer does not improve the situation, it simply removes the requirement of the programmer having to think about what they're doing. Every good programmer should understand what their code does at the machine level, because that's what programing is about, instructing a machine. Adding layers of abstraction that obfuscate what's really happening is a bad thing imho. > * Because adding on to C to fix its many small warts would be a mess > (it can be less bad than C++ and still very bad). Do you say that because of the syntactic structure of C, or because of the way the standard is developed? > Not all modern languages have to be towers of complexity: Scheme and SML > are two very simple and elegant languages, and even Haskell 98 can > really be kept in your head in its entirety. I don't think any language _should_ be towers of complexity. But your notion of elegance seems to be quite different from mine. Personally I see code clarity as a component of elegance, and from a syntactic perspective I've yet to see any faithful Lisp dialect that competes with well structured C code. I realize I may be throwing my self into a fire by bringing up parenthesis hell, but I believe it's an important point. From a practical standpoint, syntactic clarity is very important, and syntactically Scheme, like Lisp, is a horrible mess by design. I've seen people argue that aversion to over-use of parentheses is simply psychological conditioning from using languages with a different syntax, but I disagree. Over-use of any one symbol for punctuation reduces the brain's ability to quickly and effortlessly categorize distinct sequences within text. Conversely I've seen people argue that the power of languages like Scheme are such that it is possible to create an entirely different language through meta-programing. While I have nothing against the concept of meta-programing, I don't see the point in choosing a language if for it to behave the way you want you must first mutate it into an entirely different language. Don't get me wrong, C is far from perfect and there are many ways I believe it could be improved. For example: - A powerful pre-processor that supports real scripting. - Better support for implementing abstract data types. - Greater context granularity. - Support for generators and concurrent programming methods. - Support for custom calling conventions. - Standardized support for passing meta information such as 'type'. - Support for stub functions that are guaranteed to be inlined. I believe those features, if implemented properly, would give the programmer greater power over what the code does, and provide greater ease for implementing particular models, without adding an extra layer of obfuscation. Of course all this is simply my opinion, we're all free to choose whatever programming language we wish to use. My point of contention comes from Robert Ransom's suggestion that people *should* be using Scheme for everything, without offering any practical reason for people to change. Regards, Al Gest