My last C++ project was a background daemon that would download your RSS feeds and do some fancy parsing. I wish I could show you how much memory Java prototype has eaten vs C++ version processing the same OPML file.
No, C++ is not "essentially worthless" without Boost. In fact I never use all of Boost: your build times becomes #1 conversation topic in the office when you do. It's better to cherry-pick a few important and lightweight pieces (like pointers, any, functional, etc). Don't forget about HUGE selection of plain C libraries too.
Whatever C++ has been used for is still being written and re-written in C++ as we speak. Newer languages and paradigms wiped out the giant Visual Basic army of developers (yes, this is what people used to code "basecamps of the 90s" in, but I don't see these languages threaten C++/C/Obj-C domination for desktop software on Win/Linux/OSX.
In fact, how many native Python or Ruby GUI libraries are out there? I haven't heard of one. Only bindings to GTK/Qt.
With all that said, I will be the first to jump the wagon. If I ever get so lucky.
For most desktop software, though, neither of these things are true. The design and scope of the application are constantly changing, and mostly it just sits there. I write desktop software for a living, including a lot of CPU-intensive graphics stuff, and I'm infinitely grateful that I work in C# rather than C++. It makes me many times more productive, makes my work conceptually cleaner, and makes me a happier person all round. There's a memory cost, to be sure, but it's acceptable, and 90% of the clock cycles are spent in C libraries no matter what, so I don't see much of a downside.
My background's in 3D graphics and computational geometry. I've always enjoyed working in C++ on computationally intensive problems, and reducing a problem to its cleanest, fastest implementation. But I think that in the real world, 99% of the time, what really matters are the features, and that the widespread fascination with efficiency is mostly just techno-fetishism.
Also, allow me to disagree with you on something:
"If you have a small, well-scoped application, like your RSS daemon, C++ is going to be best of breed in most cases. Similarly, if performance is your absolute primary concern, there's nothing out there that can compete. For most desktop software, though, neither of these things are true."
Perhaps it's our difference in backgrounds, but most desktop software is more like that: small pieces that need small downloads, small memory footprints and instantaneous startup times. Just count the number of executable files on your hard drive and see what percentage of them eats more than 3MB of RAM (measured in 'private bytes'). Or you can look at the list of running processes: you'll see perhaps 1-3 behemoths like Firefox or Photoshop there, and one can only wonder how FireFox memory consumption would look like under JVM or .NET VM.
Have you got any data to back that up?
More like 15% in my experience.
Look at various PC/Mac softwares out there: most of PC-only software belongs to "free&shitty" category, but nearly everything for OSX you have to pay for, and they (users) are accustomed to it.
I am not sure if I can post results of the research my company has done (and paid for) here.
Which of course raises the question: why C#/Java instead of C++ in conjunction with something like perl or python?
C# isn't the best language out there, and certainly not the most elegant, but it's been carefully designed by some very smart people, and it shows. At the end of the day, for what I do, it's the best tool available.
That being said, C# is a huge step above C++, at least with respect to application development. Garbage collection aside, it has first-class functions, well-implemented closures, an integrated query DSL, and decent (if a little awkward) reflection capabilities. It's not an exciting language, and I don't feel particularly cool saying I use it, but I think it gets a pretty bum rap.
I have dealt with Java memory problems several times now and am convinced that garbage collection has no business near performance bottleneck code.
I'm not saying C++ shouldn't be used because if it really adds to the quality of the result the additional effort may be worth it. It's a balance between the quality of the product and time to market.
There's one more issue that shouldn't actually play a role but does: I have rarely seen C++ code that isn't full of incredibly stupid errors like copying large collections three times in a single function call. Even smart professional programmers very often write C++ code that is complete crap and way slower than the most naive C# or Java implementation.
But as someone who writes very data intensive apps I have to say there's just no way around C/C++. C# and Java VMs have twice the memory consumption of C/C++. I don't know whether C code uses more memory than assembly, but I doubt that a factor of two will ever be negligible, particularly because it translates into a factor of 100 as soon as you run out of memory and have to hit the disk.
Unfortunately the combination of C/C++ and dynamic languages doesn't work for many of my own scenarios because of the GIL.
I mean look Rails (just as an example). A typical rails app runs in 16 processes, each consuming 150MB of RAM (after a while of running) just for the framework itself and a few controllers and views basically. Nothing but little helpers doing CRUD.
There's just no memory left to do anything interesting with data in-memory because all that data would have to be duplicated in each process. That's why dynamic languages driving a C++ core doesn't really fly for interactive apps. It works for batch processes like what google does.
I'm glad that coding in C++ makes you feel like more of a man, but Java's not the only competition. C++ and Java have both (awkwardly) added closures in their latest specification, so they're obviously maneuvering against something outside of your little duality.
Also, I don't see how you can knock Java for its libraries when C++ is essentially worthless for large-scale development without Boost.