The whole exchange is great! Keep on reading the subsequent messages. Here's some interesting parts:
"
The fact is, that is exactly the kinds of things that C excels at. Not
just as a language, but as a required mentality. One of the great
strengths of C is that it doesn't make you think of your program as
anything high-level. It's what makes you apparently prefer other
languages, but the thing is, from a git standpoint, "high level" is
exactly the wrong thing. "
and
"And if you want a fancier language, C++ is absolutely the worst one to
choose. If you want real high-level, pick one that has true high-level
features like garbage collection or a good system integration, rather than
something that lacks both the sparseness and straightforwardness of C,
and doesn't even have the high-level bindings to important concepts.
IOW, C++ is in that inconvenient spot where it doesn't help make things
simple enough to be truly usable for prototyping or simple GUI
programming, and yet isn't the lean system programming language that C is
that actively encourags you to use simple and direct constructs."
That's not what he said. He said "I wrote it in C because C was the best language for the job. It's also nice that C discourages idiots from trying to contribute.".
He's right on both counts. I've always found using tools designed for smart people to be an effective way to cut down on the number of stupid people attempting to work on a project, but the main advantage is getting to use a good tool instead of a bad one.
<i>"pick one that has true high-level features like garbage collection or a good system integration, rather than something that lacks both the sparseness and straightforwardness of C, and doesn't even have the high-level bindings to important concepts."</i>
That's a straw man. There are garbage collectors and "system integration" libraries for C++. The language doesn't lack for high-level bindings, but it also doesn't force you to adopt a paradigm. This flexibility is C++'s greatest strength, as well as its greatest weakness.
Personally, I find it more than a little ironic that a huge amount of the complexity of C++ comes from its insistence on remaining backwards-compatible with C. Linus may love the "lean system programming language", but it sure does bring a lot of ugly baggage to the C++ party....
"...but it also doesn't force you to adopt a paradigm. This flexibility is C++'s greatest strength, as well as its greatest weakness."
Lisp is mult-paradigm also. I think the difference is that Lisp has a philosophy. The paradigms fit together in a consistent way. For example, Common Lisp has an object system, CLOS. But they implemented it around generic functions, in order to keep the functional programming nature of Lisp intact.
Lisp will let you do pretty much anything. But it often gives you a "nudge" in a particular direction. I believe pg points this out in On Lisp; you can write procedural code in Lisp, for example, but the code flows a lot better if you write in a functional style.
C++ just seems like a kitchen sink language. Everything is in there somewhere. But it doesn't seem like the parts were designed to fit together in any particular way.
I agree with you about Lisp. I like Lisp; it's definitely more elegant than C++.
That said, C++ was designed to be resource efficient, at a time when the best Lisp interpreters were...well...less so. So, while C++ and Lisp both have OO, functional, procedural and metaprogramming techniques (among others), C++ has made some ugly choices to achieve efficiency at the same time.
For the record: I am not trying to get into a Lisp/C++ debate.
" The fact is, that is exactly the kinds of things that C excels at. Not just as a language, but as a required mentality. One of the great strengths of C is that it doesn't make you think of your program as anything high-level. It's what makes you apparently prefer other languages, but the thing is, from a git standpoint, "high level" is exactly the wrong thing. "
and
"And if you want a fancier language, C++ is absolutely the worst one to choose. If you want real high-level, pick one that has true high-level features like garbage collection or a good system integration, rather than something that lacks both the sparseness and straightforwardness of C, and doesn't even have the high-level bindings to important concepts.
IOW, C++ is in that inconvenient spot where it doesn't help make things simple enough to be truly usable for prototyping or simple GUI programming, and yet isn't the lean system programming language that C is that actively encourags you to use simple and direct constructs."