4 ms·
C++ Considered Harmful
- st3fan 18y agoPersonally I don't agree with ESR. I think C++ is a great language, if used with caution, and I will use it right away in projects where C would normally be used. Specially with useful libraries like STL and Boost being available. Most plain C projects are reinventing the wheel many times. Linked lists, hashtables, reference counting, OO with function pointers. I'm sure those projects shrink at least 33% in size when they would be using STL or Boost. I've certainly seen that in my own code.
- alexk 18y agoYep, almost every time I look at good C code I see classes and iterators (written in macros), operators etc. Why not use C++ that has this onboard? C++ is a unique language, it gives you a lot of expressive power with the ability to access the lowest level.
- wheels 18y agoIs posting a flamebaity story just to immediately disagree with it really a good idea?
- kingkongrevenge 18y ago> libraries like STL and Boost being available. I suspect most of the distaste for C++ is a hang-over from another era. People had some exposure to MFC programming or old compilers with horrible STL support and that formed the popular impression of C++. Modern C++, especially with boost, is a very good language.
- greyman 18y agoI think this comment sums it pretty nicely: ---> "So, to answer your question about how many wizards C++ has ruined, I can argue that I never bothered to go further in programming due to feeling utterly lost with C++ and Perl." ;-)) However, one comment is worth discussion: "There is no reason to use C++ for new projects." Do you agree with this? What is a better choice then for developing standalone apps or libraries where speed is critical? It's funny to watch how some people bash c++, and then, when we need to develop some critical app, like javascript engine, suddenly the choice is again C++. ;-)
- time_management 18y agoOCaml is quick to write and produces executables with great performance.
- greyman 18y agoOk, but if you would be a project manager responsible for developing and delivering software product, would you choose non-mainstream language for the project? OCaml might be better in academic sense as the language itself, but now I talk about commercial product...so you would need to take all factors of software development into consideration - like how you will find future developers if you expand, what the support will be, etc. etc.
- jrockway 18y agoAdding a bunch of "what ifs" to justify your choice of language is not a good argument technique. "What if your manager is paid by Sun to only advocate Java?" There's no way to argue that, but it doesn't matter, because it's irrelevant. Pick the langauge you want to use.
- greyman 18y ago>> Pick the langauge you want to use. I can't, because I am just one worker and the language is choosen by the top product manager. That's not a complaint, my point was that you usually can not choose a language you want to use in professional setting. You can do so for your hobby project.
- tptacek 18y agoC++ is the "great white whale" of programming languages? It is not. It is the manatee of programming languages, trivially located and dispatched, though more often by accident than by intent, because who gives a shit?
- wheels 18y agoOh, the irony. A harmful programming language critique from a blog titled, "Armed and Dangerous: Sex, software, politics, and firearms..." Seriously, every time I run into more of this guy's stuff it solidifies my view that he's a tool. If you want proper C++ schlaging, here it is, done right: C++ Frequently Questioned Answers: http://yosefk.com/c++fqa/ http://yosefk.com/c++fqa/ We now returned to your regularly scheduled uninformed language rants.
- kxt 18y agoI do consider C++ a bad language. The syntax is a MESS, it's quite lacking on the OO front, and the language/STL misses some quite important components (e.g. concurrency, networking). And having an actual ABI would help too. However, it's still generally my language of choice, and not only because it's the language I know most. It has the flexibility of C while providing some OO capabilities and the STL. And there is the widespread availability too (although that's not really C++'s honour but GCC's). One could also argue that C++ software is easier to deploy, as it needs no VMs or interpreters, but it's quite a moot point because every moderately sized application will have 3rd party dependencies to provide everything the STL is lacking. Also, the RAII idiom is perhaps my favorite pattern, and I'm yet to see a language that has RAII support as strong as C++ has. (Although I do plan to have further investigations about Python 3k/2.5's 'with' statement, it seems to be a good contender) I rely heavily on RAII while coding/desinging, this makes coding in Java very sour for me. And Ruby's block idiom, while it's really lovely and comes very handy in many cases, it ain't no RAII. Like it or not, while it's slowly fading away, C++ will still be around for a while. I don't really see KDE rewritten in any other language any time soon.
- anamax 18y agoMuch of the reason that RAII is such a big deal for C++ is that C++ doesn't help manage resources. The fact that one can free in destructors and that destructors are called automatically in some circumstances is important only if you need to free. That's simply not an issue for many languages. Yes, there are other resources to manage. Python's with and Common Lisp's unwind-protect are both good for open file handles and the like. unwind-protect is better than with and with is better than constructor/destructor because constructor/destructor and to a lesser extent with require too many contortions to use.
- alexk 18y agoconcurrency, networking - boost has both
- qwph 18y agoI was going to say that C++ does at least make the compiler implementor's job easy (as it shifts the burden of complexity onto the application programmer), but then I started to think about what's involved in actually parsing C++, and decided that, hey, maybe it's no picnic for the compiler writers either...
- wheels 18y agoC++ is probably the hardest widely used language to parse. See the "FQL" for more: http://yosefk.com/c++fqa/defective.html#defect-2 http://yosefk.com/c++fqa/defective.html#defect-2 (Note: I use and like C++ for a lot of things, but there is a lot of valid criticism of it and the FQL rants are at least well-informed.)
- psyklic 18y agoI'm personally tired of "x Considered Harmful" articles. Not only are they terribly cliche, but most of them are about complex, highly debated issues and do not really prove their point.
- jrockway 18y agoI don't like C++, but ESR's reasoning here is faulty. C++ was not meant to be elegant; it was meant to run quickly and have some OO. It succeeds at both of those. The hard part is writing and compiling it. The syntax is bad, the language features are easy to misuse, and the compilers are slow and don't give good error messages. But the main reason to hate C++ is because allocating your own memory and figuring out what type variables have is a job for the computer, not for the programmer.
- wh 18y agoI don't know why C++ is much hated when all the big applications at amazon, google, microsoft, adobe, apple are written in C++. I think it's the best practical language for good scalable applications.
- kaens 18y agoThat's debatable. It is, however, the most widely known language (besides maybe java?) that you can write the types of applications that C++ is used for in.