GNU Grep and Sed Maintainer Quits: RMS and FSF Harming GNU Project
In a scathing rant posted to a GNU project mailing list, the maintainer of grep and sed announced that he was quitting the GNU project over technical and administrative disagreements. Chief among them: He believes RMS is detrimental to the project by slowing down technical innovation (the example used was RMS's distaste for C++, not exactly a strong point against RMS). Additionally, he noted that the FSF is not doing enough to help GNU "Projects such as gnash are bound to have constant funding problems despite being (and having been for years) in the FSF's list of high priority projects.". Finally: "Attaching the GNU label to one's program has absolutely no
attractiveness anymore. People expect GNU to be as slow as an elephant,
rather than as slick as a gazelle, and perhaps they are right. Projects
such as LLVM achieve a great momentum by building on the slowness of
GNU's decision processes, and companies such as Apple get praise even
if they are only embracing these projects to avoid problems with GPLv3."
The author is quick to note that he has no philosophical disagreements with GNU or the FSF.
I knew about Linus Torvalds's distaste of C++, but not Richard Stallman's. What is it with open-source leaders and their irrational hate of C++?
From TFA (I know, I know, cardinal sin, but I read the article yesterday on LWN):
However, all Stallman had to offer on the topic was "We
still prefer C to C++, because C++ is so ugly" (sic). As a result of
this, the GNU coding standards have not seen any update in years and
are entirely obsolete.
So, RMS wasn't involved in the C/C++ switch, but his refusal to acknowledge it has lead to a lack of "C++ is a real thing, we should have a coding standard" across GNU.
I saw another comment somewhere (that I can't find now) about how, prior to LLVM, RMS *was* opposing many things (I believe, but can't be sure without the source, that the switch to C++ was one of these things), and since LLVM came out as a competitor, RMS has been compelled to be more amicable to change he doesn't personally like.
True, but those few people who use C++ correctly seem to have learned their lessons with C. I'm thinking of Sam Leffler, I've held up his clean programming in his HylaFAX software as examples of *how* to do C++, instead of merely holding up the numerous examples of how not to do it.
Unfortunately for comparisons, Sam is one of the authors of BSD UNIX. Not NetBSD, OpenBSD, FreeBSD, or invent-yet-another-pointless-license-scheme-BSD. But original BSD. *Brilliant* programmer. Junior programmers should review Sam's code to unlearn the bad lessons taught by people who don't understand how object oriented work should be used.
I advise people to read the actual message; this summary is exaggerated.
When using RAII sensibly, C++ does offer excellent support for babysitting your memory usage. In fact, it offers superb support for managing any sort of a resource that needs to be allocated and later deallocated. There is no good equivalent in C.
These days, C++'s modern smart pointer classes make memory management a complete non-issue. You get very predictable and effortless freeing of memory, all without having the performance of your app destroyed by garbage collection like you do when using a language like Java, C# or Ruby.
This is just the power of C++ in action. It lets you easily build minimal-cost abstractions upon C.
No, that would be Thompson and Ritchie. Stallman's neckbeard has spread horizontally to try and compete, but it's still no match for the epic reach into the neck Thompson's has in that shot.
It is not hard to find examples of why C++ is bad. C++ is statically typed, but fails to deliver the sort of type system power that ML gives programmers. C++ is object oriented, but provides no metaobject protocol and forces programmers to resort to its clumsy templates system to do things that are not hard in languages with MOPs. C++ programmers are expected to figure out whether or not they should use a shared_ptr, weak_ptr, or unique_ptr, or if they should just give up on smart pointers and try to manage memory deallocation on their own (and, of course, there is no garbage collector, not even an optional one). The fact that "move semantics" and "r-value references" are considered to be highlights of C++11 speaks volumes about C++.
For me, the major issues in C++ are not even the lack of features, although most people start there; I point to the difficulty with writing reliable code in C++ as the most important problem. C++ exceptions are only useful in cases where there is no possible way to recover from an error. There are situations in C++ where exceptions are the only way to signal an error; thus there are situations in C++ where recoverable errors become unrecoverable for no reason other than deficiencies in the language. Worse still, the very situations where exceptions are the only way to signal an error also happen to be the situations where throwing an exception is dangerous: constructors and destructors. Beyond handling errors, there is the lengthy list of undefined behavior in C++, much of which could have been defined without any ill effects. The C++ standard even fails to rule out programs that could not possibly make any sense; for example, having a non-void function without any return statements (yes, most compilers will warn you about that -- but warnings are not part of the standard, and if most compilers can detect this there is really no excuse for the standard not explicitly forbidding it).
It is not hard to understand why "C++ is horrible" has become the go-to response to any comment about C++. It is a horrible language, and it is likely a culprit in the billions of dollars wasted on software bugs each year (buffer overflows, dangling pointers, etc.). It is a horrible language because it is inflexible, it lacks expressive power, and it makes things that are simple in other high-level languages needlessly difficult (how do you give the user a macro system that allows them to extend any feature of your program in C++? In some languages, that is as simple as giving the user access to a REPL, from which they can override or extend any behavior.). We are, unfortunately, stuck with this language, and will likely be stuck with it for a while (though I am hopeful that the need for reliable healthcare software will ultimately kill C++, MUMPS, and other awful languages).
Palm trees and 8
throw the whole "right tool for the job" bit out the window because one dude doesn't like it?
Imagine a conversation goes like this. (Imagine that this is a shop that does C development right now).
New guy: This project that needs doing. I could do it in C++, I could do it a lot faster than in C.
Old manager guy: If we do it in C++ it means we have to keep C++ capable people on around. Even if you stick around 10 years from now you might be out of practice coding.
New guy: Ok, but if we don't do it in C++ we're probably not going to get it done at all, because we don't have the resources to do it in C at all.
Old manager guy: If it means we lock ourselves into a future of more skills than we have, it's not worth doing, because we can't guarantee being able to support it, and I don't want our name on abandonware.
They'd both be right. And that would be why GNU still doesn't consider itself to have a stable release. If you demand everything be done exactly perfectly you'll never even finish one thing, and if you accept 'good enough' you can easily end up with bits of code clinging to life that you will eventually have to just rewrite.
I just was on a project where one of the other software guys took all of the function names of a MS windows package, and completely rewrote how quite a lot of them behaved (not just implemented the same API differently, he actually completely changed what the functions do), but that was about 10 years ago. Now, to try and update that code and use the new version of the actual MS api we had a nightmare of a time, trying to figure out what he changed, and why was actually really hard and wasted a lot of money. And yet, it meant he had a working piece of software out the door 10 years ago that kept him in business for 10 years.
That would not be a very good idea, since certain valid C constructs that are also valid C++ constructs behave differently.
Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
The comments below seem no more relevant than this "slightly off topic" thread... I find that unfortunate. Of people who have made the world a better place, I list RMS near the top. He's done so in a selfless manner that makes me proud to be human. Sure, I don't agree with him half the time, but if I could trade my life for one where I could do as much good as he's done, yeah... I'd do it. Have you ever heard of Gandhi? Ever read about that flake? He slept (as in sleeping - not sex) naked with young girls to prove to himself he could control his animal impulses. Yet few argue about what Gandhi did for the world. It kills me to hear about people complaining about RMS's views on C++, on which he happens to be mostly right, and even if you disagree this is not naked girl territory. We should acknowledge the outcome of his life's effort: the world runs on free software. Standing ovation for RMS! Imagine how much harder it would be to write awesome code if we didn't have all this free stuff!
That said, RMS both promotes and harms the goals of the free software movement. As the "Cathedral and the Bazaar" pointed out, RMS brings a central control view to free software that is counter to the whole environment that made GNU/Linux awesome. Debian, IMO, epitomizes this flaw. Rather than helping young new programmer share code and ideas, you have to pray to the Debian Gods and hope they take pity on your pitiful new package before it can be share across the Debian universe. Sure, Debian has it's place... deep in the innards of server racks where 99.9% up time is required, but not on a bright young programmer's desktop. If you want to be part of the new innovative group of coders, go learn about programming for Android.
I hope this message can finally be heard by RMS and those most central to the free software movement: we volunteer programmers are sick and tired of dealing with the wall of red tape you've built. Please get out of the way and let us do our thing. But you're right about C++.
Celebrate failure, and then learn from it - Nolan Bushnell
So RMS doesn't like C++ -- this doesn't stop people who can use it properly from writing their projects in it, does it?
Yeah, after they enforce a company-wide ban on multiple inheritance, exceptions, and 95% of the publicly available libraries.
Google doesn't ban multiple inheritance, though in most cases multiple inheritance of anything but pure interfaces is discouraged, and there's rarely any need for Google engineers to use all of the BOOST libraries, given Google's extensive internal libraries.
I do wish that exceptions were allowed, but I understand the rationale for avoiding them (it's spelled out in the style guide), and can't disagree with the decision.
(I write C++ code for Google.)
Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
I worked with a Russian programmer of very few words, who willingly ran AIX as his desktop OS. When asked why, he said "I enjoy the strict confines of AIX."
I had absolutely no idea how to respond to that.