"C++ sucks" has become a bit of a meme around here. The upsides outweigh the downsides for a surprising number of cases. Every alternative is either immature, doesn't solve the use case that needs C++ or doesn't have the required libraries/tools.
There are people that sit back and bash C++ and then there are people that just roll up their sleeves and build really cool things with it. I'd certainly rather be in the second camp. I wouldn't mind having a simpler, more elegant language with the same design tradeoffs but that language doesn't yet exist.
My experience with legacy C++: Main problem with C++ is that it has lots of accidental complexity and a relatively weak standard feature set. The lava layer pattern is apparently very hard avoid in old applications. Due to the aforementioned weaknesses the lava layering now applies also to the modules that would be standard static modules in other languages. So it's a bit wastefull.
But since lava layering is caused by cultural and architectural issues I cannot claim that the system would be in any better shape just if some other language had been used.
Nobody I know. People I know that use C++ every day will admit it has issues but are also realistic enough to understand that any language with the same design constraints and long history as C++ will be complex.
It's the catbirds in the gallery that don't actually have to write the kind of apps that require a language like C++ that "bash" it.
But for projects that don't view those design constraints as very important and projects created when there were other languages that don't have the same history those compromises/explanations won't help. If/when there is a better language you don't have to suffer the history of C++ anymore, just use a newer language without the history. And if the constraints for example were to make it C compatible and very fast, for many projects those may not be of much importance anymore. Other language may be fast enough and easier to write in. I think it is probable that most of todays applications has lower speed requirements than C++ were aiming for. Those who needs speed can probably still use C.
This is my point exactly. I'd consider both git and the Linux kernel tough projects, so the choice of the programming language is interesting. More so, given his stance on C++.
How come it's interesting ? Linus has always been a C -programmer, and kernel space is something where you want to keep things simple and access tha raw bits of things, so C is a natural choice.
And if you've been programming C for 20 years or more, writing git with C feels like a natural solution.
It's not always about writing stuff with the most high definition solution, it's more about expressing ideas with the tools you know also.
> I've come to the conclusion that any programmer that would prefer the project to be in C++ over C is likely a programmer that I really would prefer to piss off, so that he doesn't come and screw up any project I'm involved with.
Quintessential Linus, but I wouldn't call this an "evaluation"... :)
>Do you really think C is any easier to understand that C++?
Yes. C is very small and simple. You can learn all of C in a very short time. C++ is the most complex programming language in existence. It is unlikely that there is any person in the world who actually knows it all, including the creators.
>or you could try to implement or use an existing implementation of a dynamic array
Imagine that. You could use libraries that implement things you want. What a concept.
> "Imagine that. You could use libraries that implement things you want. What a concept."
I think I didn't explain myself, but something that basic in these days should be on the standard library in my opinion.
>"Yes. C is very small and simple. You can learn all of C in a very short time."
I don't think C is simple at all. Its syntax can be really cumbersome at times (see my first example). Also it is very annoying to debug, and C code is very prone to contain memory corruption bugs and leaks.
C has great advantages but being simple is not one of them.
>I think I didn't explain myself, but something that basic in these days should be on the standard library in my opinion.
Ok well you hop in your delorian and go back to 1970 and let them know. In the mean time, how does that in any way make C not capable for the same tasks as C++?
>I don't think C is simple at all
Then you don't know C. The entire point of C is that it is simple.
>Its syntax can be really cumbersome at times
That has nothing to do with simplicity, and C++ has far more complex syntax.
>Also it is very annoying to debug
C is very simple and straight forward to debug. C++ is much more difficult to debug. Have you ever used either language?
>and C code is very prone to contain memory corruption bugs and leaks.
Because it is so simple.
>C has great advantages but being simple is not one of them.
Well your opinion is in the vast minority, and does not seem to have any basis in reality. The C spec is a tiny fraction of the size of the C++ spec.
>Ok well you hop in your delorian and go back to 1970 and let them know.
Well they could have added in C99 or more recently in C11. What's wrong about updating a language?
> In the mean time, how does that in any way make C not capable for the same tasks as C++?
I would rather prefer not reinventing the wheel and a language that actually ship with it.
> Then you don't know C. The entire point of C is that it is simple.
I know C fairly well to recognize it quirks (just like all languages have). I think your definition of simple is very different of mine. Scheme is simple, InteractiveC is simple, C it is not.
> That has nothing to do with simplicity, and C++ has far more complex syntax.
cumbersome(adj): difficult because of extent or complexity
simple(adj): 1.easily understood or done; presenting no difficulty. antonyms: complex
How come something cumbersome has nothing to do with simplicity?
Also I am not saying that C++ is simple. But it has a subset that it is well defined, type safe and easy to understand.
> C is very simple and straight forward to debug. C++ is much more difficult to debug. Have you ever used either language?
Yes, I have used both in my formal job, and I can avoid memory leaks and memory corruption easily on C++. Not the case on C, specially when working in medium size teams where always people forget what they should cast a void* into and why they should not.
>>and C code is very prone to contain memory corruption bugs and leaks.
>Because it is so simple.
Seriously? It is a feature now? Well Scheme is a good example of language that is order of magnitudes simpler than C and it is not prone to memory leaks nor memory corruptions
>"Well your opinion is in the vast minority, and does not seem to have any basis in reality. The C spec is a tiny fraction of the size of the C++ spec."
If by simple you mean simpler than C++, yeah. You could say the same of Perl. Does is it make Perl a simple language?
Nothing, they do update the language. But fundamentally changing the language to be completely different is not the same as adding some small thing. C is simple on purpose. Adding complexity is not just an update, it is making it no longer suitable for its intended goal. So they choose not to.
>I would rather prefer not reinventing the wheel and a language that actually ship with it.
You don't have to reinvent the wheel, use a library like you already said.
>I think your definition of simple is very different of mine
Clearly. But mine is the same as 90% of the people who have commented on the subject. People overwhelmingly describe C as simple.
>Scheme is simple
Yes it is. As is C.
>How come something cumbersome has nothing to do with simplicity?
You just quoted how. Are you joking?
>Also I am not saying that C++ is simple
But you are arguing that C is complex and thus not appropriate, while C++ is appropriate. You can't have it both ways.
>Yes, I have used both in my formal job, and I can avoid memory leaks and memory corruption easily on C++
Which has what to do with debugging? And why are you incapable of avoiding those problems easily with C when everyone else does it just fine?
>Not the case on C, specially when working in medium size teams where always people forget what they should cast a void* into and why they should not.
Yes, clearly there's no way groups of people could work together on large complex software in C. I'll go tell linux, apache, X, all 4 BSDs, nginx, postgresql, postfix, etc, etc, etc that they don't exist. I'm sure they'll be glad to know.
>Well Scheme is a good example of language that is order of magnitudes simpler than C and it is not prone to memory leaks nor memory corruptions
Scheme is not even one order of magnitude simpler than C. Go read the specs. And scheme is not prone to memory leaks and "corruption" because it is higher level. This also makes it much slower. Even more importantly, it makes it a ridiculous comparison.
>If by simple you mean simpler than C++, yeah.
You are the one advocating C++ over C while claiming C is too complex. What are you blaming me for?