Demise of C++? 271
fashla writes "Several somber and soul searching threads have been recently posted to the USENET newsgroup comp.lang.c++ such as "C++ is Dead" and "A Dying Era". The reason for this reflective mood is the sudden demise of the magazine C/C++ Users Journal (CUJ) http://www.cuj.com/ that had been published by CMP Media. Participating in the posts have been such C++ luminaries such as Bjarne Stroustrup and P.J. Plauger. While some contributers think that CUJ's demise is due to the general trend away from print, others think something else is afoot..."
Balkanization (Score:5, Interesting)
Though it were hard for me to imagine, for instance, Unreal [wikipedia.org]'s engine being ported to Java, Quake [wikipedia.org] seems to have fared well with feral C.
Re:Balkanization (Score:3, Informative)
Re:Balkanization (Score:3, Insightful)
Is that the same C# that a friend uses, which apparently requires 12 bytes of memory to store a single 32-bit integer?
If that's accurate, then I don't think C++ has much to fear from C# in its natural areas of strength...
Re:Balkanization (Score:2, Interesting)
Of course I always figured this was just my weirdness, I never realized anyone else felt this way about it. I sure don't miss those retarded C++ references and stream operator overloads.
Re:Balkanization (Score:3, Insightful)
Re:Balkanization (Score:2)
Re:Balkanization (Score:5, Informative)
Re:Balkanization (Score:2, Insightful)
Re:Balkanization (Score:3, Insightful)
My personal opinion has always been one of pragmatism instead of zealotry; pick a language based on the task. It has been said by knowledgeable people that the benefit of OO over procedural is not theoretical performance but rather the practical performance. OO techniques typically allow one to better understand large problems and thereby create better solutions. Ofcourse, ree
Re:Balkanization (Score:5, Insightful)
But v-tables are only created when virtual functions are used in classes, and only then. If no virtual functions are used then a C++ program can use static linking the same as for a C compiler. Given that C++ compilers are also defined to be C compilers, then for any given C++ compiler (and no virtual functions in the C++), C and C++ code should run at the same speed.
Now if you want to compare *different* C and C++ compilers, that is a seperate matter.
If you are interested in the inner C++ workings I can suggest any of the Scott Meyers books. Other people can probably suggest other authors as well.
Re:Balkanization (Score:2, Informative)
So what is going on here?
cout << "Hello World!" << endl;
The above code uses V-tables, and the above code is what is recommended by C++'s "inventor". The above is slower and produces more machine code than:
puts("Hello World");
Period.
Supporters love to say that's a bad use of C++, or that the compiler could recognize this special code, or that the compiler should do some kinds of deep inlining at compile-tim
Re:Balkanization (Score:4, Informative)
What I was saying was that the C code will run the same if it is compiled under a c++ or c compiler, whereas a lot of people thought that c++ automatically inserted v-tables and hence was presumed to be slower.
You example is flawed as you are comparing apples to oranges. The use of stream insertion will bring in all sorts of crap into the equation while "puts" will not. Hence your "puts" will run faster. (But try and overload your puts example to output custom data on a generic class by class basis and see how much extra code you have to add). Once you start using feaures of one language that are not implemented in the other, then simple speed comparisions go out the window.
Re:Balkanization (Score:2)
I effectively started talking about the speed of C and C++ statically linked code being the same with all things being equal. But (as I saw from another of your posts) you actaully were ripping Bjarne for stating that stream insertion is the same speed as puts. Now that is something I totally agree with. But it is still apples vs oranges as puts only has a fraction of the funct
Re:Balkanization (Score:2)
Absolutely not. I am comparing two distinctly similar things: The accepted authoritative methodology that is C++ versus the accepted authoritative methodology that is C.
That difference methodology has produced rumor mills similar to the ones you have heard (about all functions being invoked through indirection)- but it isn't the difference in implementation. Consider that Objective-C uses a large amount of message passing, but there's no confusion what
Re:Balkanization (Score:3, Interesting)
No matter what else it does the slow part is entering kernel mode and printing characters to the screen.
You are discussing a 20ns optimization on a 1ms call.
Re:Balkanization (Score:2)
argument. You should apply to work at Microsoft.
Re:Balkanization (Score:2, Interesting)
Re:Balkanization (Score:2)
justification in saying "well the API/syscall is slower than anything I can
write so I won't bother" because what happens if 2 years down the road
someone speeds that API up 10x and then your code is recompiled and *it*
becomes the bottleneck?
Re:Balkanization (Score:2)
Rules of optimisation:
1. Don't
2. (Experts Only) Don't Yet!
This is the path of true wisdom (Score:2)
Re:Balkanization (Score:2)
Re:Balkanization (Score:2, Redundant)
puts() isn't a system call on UNIX. I don't know what Operating System you're referring to.
What's being compared and discussed is the authority of C++: Bjarne repeatedly states this is the way to go, and that it is not slower nor larger than in C. Bjarne is extremely confused on that point.
No matter what else it does the slow part is entering kernel mode and printing characters to the screen.
No it isn't. Profile it and see for yourself.
You are discussin
Re:Balkanization (Score:4, Interesting)
OK. puts is faster. But I hate to break it to you, compared to cout, puts sucks.
puts is error prone in a way that cout is not. More appropriately, cin is far, far superior to get and all those derivatives. cin, cout and cerr, are slower, have more overheads, take more space,etc, etc. I still prefer them. Why? Because they're safer. Not totally safe, but leauges safer than the equivilent c functions.
On top of that you can overload cin. Some people do screw this up, but being able to write:
while(cin >> Big_Complicated_Object){
}
Is very sweet. C can only offer me this with hacks that will freeze thy young blodd etc, etc, etc.
I don't find C++ too bad. The compilers are OK, and I don't abuse the language features. I'm an OO kind of guy, and I like decomposing my programs. C++ lets me do this in a way C cannot.
Re:Balkanization (Score:2)
Accepted.
compared to cout, puts sucks.
You've admitted puts is better than cout in at least one way.
In any event, this thread is not about whether C++ is better or worse than C, it's about whether rumors about performance and size penalties in C++ are justified, and in many cases it appears the answer is yes.
On top of that you can overload cin.
No you cannot. std::cin is a global variable. You can overload >> in the class istream but that's not the same thing at all.
I like decomposing
Re:Balkanization (Score:2)
That's what's known as overloading streams, which is what cin is.
I have no idea what you mean by "decomposing" your programs.
Specifically, using object orientation and functional blocks to make everything simpler. i.e. not having a 40,000 line app in one file. C++'s big advantage is that I can do all this without using macros. C++'s big disadvantage is having to use pointers to d
Re:Balkanization (Score:2, Insightful)
Re:Balkanization (Score:5, Informative)
No, it doesn't (or at least shouldn't with a decent compiler).
I have compiled the following code:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
with G++ 3.3.1 on x86 (and pretty standard options: "-ansi -fomit-frame-pointer -O2") and the results for the "main" function where the following:
main:
.LFB1550:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
pushl %edx
pushl %edx
andl $-16, %esp
pushl %eax
pushl %eax
pushl $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostrea
subl $12, %esp
pushl $.LC0
pushl $_ZSt4cout
.LCFI2:
call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_E
addl $20, %esp
pushl %eax
.LCFI3:
call _ZNSolsEPFRSoS_E
leave
xorl %eax, %eax
ret
[".LC0" is the string "Hello World"; warning:
As you can see it's exactly what you can expect, with only two *direct* calls. Granted the "puts" version requires only a single call, but only because here the output is split in two parts, first the "Hello World" and then the newline.
Hope this helps the discussion.
Re:Balkanization (Score:3, Informative)
Sorry to reply to myself, but if anyone finds the above x86 assembly code difficult to understand, the equivalent C source code is:
where f1 and f2 are provided by the standard library, in the basic_ostream class (f1 returns its first argument, cout).
Re:Balkanization (Score:2, Informative)
Note the jumps into the plt pages looks like this:
0003afb0 <_ZNSo3putEc@plt>:
3afb0: ff a3 0c 02 00 00 jmp *0x20c(%ebx)
3afb6: 68 00 04 00 00 push $0x400
3afbb: e9 e0 f7 ff ff jmp 3a7a0 <CXXABI_1.3+0x3a7a0>
Disassembly below:
0007d9f2 <_ZSt4endlIcSt11char_trai
Re:Balkanization (Score:3, Informative)
The above code uses V-tables, and the above code is what is recommended by C++'s "inventor". The above is slower and produces more machine code than:
No, the above does not use virtual functions/operators, and hence it does not use a v-table.
After all cout is not a pointer anyway!! So even if operator << would be virtual, it would be called directily without v-table.
The above is slower and produces more machine code than:
puts("Hello World");
If its to slow on y
Re:Balkanization (Score:3, Insightful)
Re:Balkanization (Score:4, Funny)
I love it... when will GCC be supporting it?
Java is dying too (Score:2)
The thing we are shifting twords doesn't exist, but is being created slowly as we advance our programming languages. We need a nice pla
Re:Java is dying too (Score:2)
Re:Balkanization (Score:5, Interesting)
And just a few days ago I was reading on slashdot about Java/C# falling in between C/C++ for low-level systems programming and the "dynamic and/or scripting" languages for highest productivity (e.g Perl, JavaScript, Python, PHP, Ruby, Haskell).
Re:Balkanization (Score:2, Informative)
Unreal's engine being ported to Java? (Score:2)
Anm
Re:Balkanization (Score:2)
From my point of view (Score:4, Insightful)
The problem with C++ is that it is neither as simple as C nor has it the benefits of Java and C# as they allow for code that is easier to read and understand. The available tools are also better for the competing environments on the upper side.
C is still developing features at a slow but steady pace and it has inherited a few from C++. There will probably be more features inherited in the future, which will cut more into the area of C++. The difference between C and C++ is that C isn't object-oriented while C++ supports object-oriented design. But object-oriented design is not necessarily needed at the low-level programming that is used when accessing devices and similar operations, and hence C will be the choice of such programming.
Re:From my point of view (Score:5, Insightful)
You're way off. So far that I'd say you've never read or written modern C++ code. There's a lot of metaprogramming. Look into templates sometime. Try out the STL and the boost libraries [boost.org]. There are significant C++ programs that are not object-oriented and would be nearly impossible to duplicate in C with the same kind of efficiency.
I find C++ to be an ugly, ugly language, but it's also a lot more than the "C + classes" that it used to be.
Re:From my point of view (Score:2)
Don't talk to me about Boost (Score:2)
language. If I wanted a different language I'd use one. Plus it tends
to be a solution for problems that don't exist.
"would be nearly impossible to duplicate in C with the same kind of efficiency"
BS. Unless you think theres some sort of magical assembly language that
a C++ compiler can generate than a C compiled couldn't.
Re:From my point of view (Score:2, Informative)
I think "sharp" is not too appropriate... (Score:3, Funny)
Re:I think "sharp" is not too appropriate... (Score:3, Funny)
I could go for some hashbrowns.
Re:From my point of view (Score:2, Insightful)
Also, just because C doesn't "support" OO design doesn't mean you can't do it anyway with some discipline. (And no, I'm not talking about rolling your own vtables everywhere. That's OO implementation, no
Re:From my point of view (Score:5, Insightful)
My experience with C++ and Java is that Java is simpler to get your head around, but can really get annoying once you get going, because of the number of gross hacks and workarounds required to avoid excessive heap allocation. Compared to C, C++ often results in dramatically clearer code, simply because it offers the ability to wrap things with enough syntactic sugar that it makes source code much more concise.
However, taking advantages of C++'s strengths requires some discipline, and requires programmers to understand what's going on to some degree, and as we all know, the great majority of programmers are idiots.
I suppose in the end, the best progamming language for idiots will win...
Re:From my point of view (Score:5, Interesting)
I got over my dislike of C++ about two days ago when I decided to use Qt to do some programming, which pretty much forces you into C++. I was really shocked at how unpleasant it *wasn't*. I've had some really bad experiences with Java - a lot of "model" is forced down your throat. Using C++ felt very natural, and I noticed a huge number of really nice touches that are quite cheap, because they're done by the compiler, but that (a) make your coding less error-prone, and (b) are just horribly convenient.
So my point here is that if you've been hearing for years that C++ isn't worth your time because it's object oriented or because it's just C warmed over, neither of these statements is true. I'm embarrassed to have ever repeated them (sad to say, I have done so in the past).
I really don't think C++ is on the way out. My main complaint about it at this point is that g++ is too verbose when I use an overloaded function that doesn't exist - it prints a list of all the possible candidates, which can get quite long. I don't think that's a capital crime, though.
Re:It will be a happy day... (Score:2)
do low level programming I want memory to be free'd when *I* request it,
not when the runtime (which would be extra overhead too) thinks it should
be done. The problem is C++ is trying to be all things to all men, as low
level as C and as high level as something such as python. Problem is what
you end up with is a rather unsatisfying smelly stew.
Re:It will be a happy day... (Score:2)
Re:It will be a happy day... (Score:3, Interesting)
While D certainly has some good points, I'm not entirely certain that even Walter Bright is certain it's entirely ready to take over as the premier language. Since you posted as AC I don't know if you read or participate on comp.lang.c++[.moderated] on a regular basis, but if you've been following all the threads, you'll notice where DbC is being discussed, and D is being used as a prime example of how to completely screw thin
C++ Dying? (Score:5, Funny)
Nah (Score:5, Insightful)
What we are noticing today is that programming languages alone just don't cut it anymore. The software is so advanced, that standard language constructs and libraries are way too raw to be applied to something useful for the average application programmer. Knowing frameworks, APIs and libraries is becoming a lot more important than using all the language paradigms and hidden tricks.
I think C++'s user base is splitting: On one hand there are the library and API developers, for whom the standard and the language are wholy. On the other hand, there are the application programmers, who care about the practical side of the language; they use it because it has advantages over other languages and has lots of libraries written for it.
My belief is that C++ is more alive today than ever. It is more powerful than ever. And it will be for a long time (in technology terms, indeed). Of course, in 10 years time it won't be recognizable. But it's wrong to say that C++ is dying.
Widely used languages don't die quickly (Score:3, Insightful)
http://www.dedasys.com/articles/programming_langua ge_economics.html [dedasys.com]
( although my hosting provider's network seems to be running a bit slow:-/ )
Re:Widely used languages don't die quickly (Score:2)
We just got tired of being insulted (Score:5, Insightful)
translation: LA LA LA LA, LA LA LA LA (Score:3, Insightful)
C++ is kind of a monster of a language (almost as bad as Perl), but it is one of the few I'd choose for the niche where speed/space really count. Unfortunately for C++, there are very few programs for which this is the appropriate niche. Most of the C++ that crosses my desk should have been written in an appropriate scripting language (insert your favorite, Python's currently mine). I even heard a tale of someone writing a "makefile" in C++ (gawd). These mistakes cost a lot of time and money.
My b
Re:translation: LA LA LA LA, LA LA LA LA (Score:5, Insightful)
The RAND corporation says that more than 70% of all software is embedded software. Embedded as an industry is almost universally C++. Please do not confuse being in a different branch of the industry with a branch of industry simply not existing.
Re:We just got tired of being insulted (Score:2)
You, you use C++, which may be on somewhat of a decline thanks to its children Java and C#, but is still considered a "real language".
Re:We just got tired of being insulted (Score:5, Insightful)
We're just plain tired of giving the same answers to the same people who never listen and carry on regurgitating the same crap they heard from some uninformed idiot. There's one thing that's very obvious from the numerous appearances of C++ on Slashdot recently: very few of the readers here have actually used C++ in any serious way.
You're only hurting yourselves when you dismiss C++ out-of-hand for uninformed reasons.
Magazine quality (Score:4, Informative)
I don't know about any subversive anti C++ group that is plotting the downfall of this language, but I was taken aback last week when I received the next issue in my C/C++ Users Journal subscription that had a letter attached to it saying that it was the last issue ever. This pissed me off as you don't just dump a magazine like a hot potato, you track the way it is selling and you say "well
What also annoyed me about it was that the publishing company will transfer my exisiting subscription over to Dr Dobbs (though I can get my money back). Personally I feel that Dr Dobbs took a major nose dive years ago and is in no way of the same quality as the C/C++UJ. The transfer from glossy to newsprint style paper showed that they were needing to make cost cutbacks which implies to me that they were losing it in general. But what really took the cake was an article printed in the Dec 2005 issue where in a DB app, presentation was confused with storage in a manner befitting a failed CS101 assignement. While I gagged at the article itself, what shocked me even more was that the Dr Dobbs editors actually included it for publication. (As I blame the editors, I am not directly pointing to the article itself).
C/C++UJ said in their cover letter that they will be expanding Dr Dobbs to take on a lot of the content from the C/C++UJ. Personally I think that Dr Dobbs may be too far gone for this sort of recovery, and that I have lost a magazine that I liked, was to the point and generally full of quality (though other people may say I am blind about this). I may give Dr Dobbs the chance to show that it has improved, but I won't be holding my breath for very long.
[/rant]
C++ : to remove yet another sucky java app. (Score:2, Insightful)
The initial Java implementation had too large a system footprint (we required it to run on fairly low spec machines with limited resources).
The rewrite in C++ ran smaller, faster, and without the Java "slow to load and start" TM.
The trade-off for the re-write was the longer development cycle.
Overall, we don't see C++ dying, but as a great tool, which still has it's place.
Netcraft (Score:5, Funny)
Less C++, more Ruby (Score:4, Interesting)
I feel sad about not using C++ more often though, because it really was my favorite language for a long time. I just can't think of any project idea I have where C++ would be better suited than Ruby.
Print is in a coma... (Score:2, Insightful)
Re:Print is in a coma... (Score:2)
A print magazine is better suited. Consider how many minutes you spend there. If you don't spend long periods of time there, then a general print magazine (Newsweek, Time, etc.) may be the best. I'm certianly not planning to read something that is lengthy, or requires really deep thinking for an extended period.
Hint: I don't even use a print magazine. I pull out my...
depends on who you work for... (Score:2, Insightful)
The clearest sign that C++ is a dead end: (Score:3, Funny)
Anything Apple uses - *must* be a dead end.
Video Games (Score:3, Interesting)
Re:Video Games (Score:2)
Well, Java is getting faster with each release, and game engines keep on getting more complex. At the same time the mainstream PC world is slowly starting to mov
C++ not dead, but it is a dead end (Score:2)
Call it what you will - the need is there and
Re:C++ not dead, but it is a dead end (Score:2)
It didn't need to be, though. Objective-C is simple enough that a C programmer can learn it in a weekend, yet it also allows object oriented programming, and supports dynamic programming better than C++ does.
In todays hasty world... (Score:5, Funny)
Death by subscription? Please. (Score:5, Insightful)
So, I don't think that C++ is going anywhere because the journal is going away... I think instead people who are using C++ will go elsewhere for information about C++.
No story here... move along.
Re:Death by subscription? Please. (Score:2)
And if you dig into one of the threads thats excatly what P.J.Plaugher says he does more and more now
C/C++ dying? What are they smoking? (Score:3, Insightful)
IMHO, C/C++ is far from dying. It's getting stronger than ever atleast in the realm of software engineering. I see it finding it's nitch closer to the hardware and in core of advanced software where speed and optimization is important.
Like, you wouldn't write a 3D game engine in java, atleast not yet anyway.
Look at KDE what is it written in? and Unreal? What is the JVM itself written in? and
I still see that software engineers are still using it heavily where as the rest of us mortals in the business realm, develop in other interpreted languages that can offer faster development time. Cost is everything, we programmers are no longer seen as an asset but more as a cost. Java and Lamp programmers are just cheaper.
I find it very unfortunate that schools are no longer teaching C++ and switching to Java.
The end result is a more limited amount of advanced C++ programmers out there working on very important advanced applications.
Re:C/C++ dying? What are they smoking? (Score:3, Informative)
Dunno what you mean by "advanced software", but C has its place when programming near hardware. C++ will hopefully die and take buffer overflows and memory leaks with it.
Quake 2 [sourceforge.net] remade in Java
Re:C/C++ dying? What are they smoking? (Score:5, Informative)
BWA hahahahah
That's pretty funny, pointing out that C++ has buffer overflows and memory leaks when compared with C. Especially since C++ has vastly better techniques for dealing with those particular problems.
Ahem.
But seriously, there is absolutely no reason why properly-written C++ can't be precisely as efficient as straight C, and as an added bonus, you get a more strongly-typed language with extra features.
I've been writing in C and C++ for close to 20 years, and C++ is just plain a better language than C. Sure, it has some crazy warts and dangerous bits, and things that can be problematic if you don't know what you are doing... but I submit to you that if you don't know what you are doing, you need to find another line of work.
Sure, other languages are definitely better in some scenarios -- it's all about using the right tool for the job! -- but for "close to the machine" work, you need a language like C or C++, and frankly, I can't understand why anyone with sufficient programming experience, and a real working knowledge of both languages, would voluntarily choose plain C over C++.
Re:C/C++ dying? What are they smoking? (Score:3, Insightful)
In an anecdotal way, a relatively mature and competent C programmer could take a good shot at implementing a C compiler and come away with something pretty close to the real thing, because C is, well, simple, and consistant. C++ on the other hand -- it's so
Re:C/C++ dying? What are they smoking? (Score:3, Informative)
The compiler allocates memory behind your back, and as a result the programmer has no direct means by which they can free that memory. Buffer overflows are trivially avoided in C, and in my experience (of looking at other peoples' C++ code) they seem to be as common, if not more common.
But seriously, there is absolutely no reason why properly-written C++ can't be precisely as effi
C++ is more like Perl... (Score:5, Insightful)
But what I've told people again and again is that *you* don't have to write it that way. Don't understand multiple inheritence? Fine...*don't use it*. Don't get templates? Fine...*don't use them*. We still use VC6 and its template functionality isn't even complete!
The truth is, you can have bizzare WTF moments in *any* language. A lot of what people attribute to the failure of a language is the failure of a programmer to properly explain what his/her code does in a straightforward way *using the code itself*. The best code is clean and concise and C++ gives you as much opportunity to do this as any language. Sure you can have multi-thousand line functions in C++, but this isn't a failure of the language to somehow magically break it apart for you into better organized bits, it's a failure to understand that a language, *any* language, whether purely written or even spoken, is to convey a message, a story, and without careful attention to detail, can become an unholy mess (like this post).
Whatever. (Score:5, Insightful)
Among all the programming languages I've used over the last 25 years (6502/6809/m68k/... assembly, Prolog/Miranda/... functional, Perl/Tcl/Python/Lisp/Java/... interpreted, C/C++/PL-1/... compiled), only 2 really stand out as "excellent" tools:
C++ and Python. I really have to struggle picking which one I love to write programs in more. They both have their place, and they are both lovely in their own way.
As far as C++ goes, since it exposes all the "knobs and dials" of the underlying computing architecure, it does have a very long learning curve. However, Template Metaprogramming is unlike anything, available anywhere, in any other language.
Listening to all these Java/C# fanboys flame C++ templates, and compare them to "Generics" etc., is like listening to guys compare their cool Ox-Cart wheel mods, while saying how much that new-fan-dangled "ferr-ar-eee" Sucks...
Yes, it took *years* for me to master C++. Someone smarter, and/or with better (read: any) instruction would -- and should -- do better. But, being able to express an algorithm purely, which will compile efficiently to process *any* type(s), stored in *any* container, accross *any* architecture, with full static type checking and bare-metal hand-coded assembly language efficiency, is something truly unique in the programming language world today.
When some other language comes out with something better and more efficient than Template Metaprogramming, let me know. 'Til then, its C++, baby!
Re:Whatever. (Score:3, Informative)
Re:Whatever. (Score:2, Insightful)
However, Template Metaprogramming is unlike anything, available anywhere, in any other language.
Thank god for small favors. Templates are great, they do what they are supposed to, which is to all for more generic programming. Template meta-programming otoh is an evil movement to half-ass add features to a language that doesn't have them. If you want Lisp macros, please by all means use Lisp. But don't take something good (type-safe generic programming) and turn it into a tool for evil. Yech, you're proba
What's really wrong with C++: denial (Score:4, Insightful)
C++ is the only remaining major language which has hiding without safety. C has neither. Java, C#, the Pascal/Modula/Ada/Eiffel family, and all the scripting languages have both hiding and safety. That lack of safety is responsible for most of the crashes and exploits in today's software. When a virus takes over your machine due to a buffer overflow, it's probably because of that bad design decision in C++. Every day, hundreds of millions of people must suffer because of that mistake.
The largest single problem comes from the decision in C to treat a pointer and an array as the same thing. This seemed convenient thirty years ago, but created a language in which the size of an array is not permanently associated with the array. In particular, the fact that arrays are passed to functions without size information is a huge source of trouble. This, of course, is why we have buffer overflows.
Attempts were made in the STL to fix this problem, but it didn't really work out. Trying to retrofit strings to the language via the template mechanism was not all that successful, since so many libraries and system calls required the old-style strings.
Safety is not a performance issue. It's possible to do checking very efficiently, if the compiler knows what to check. Subscript checks can usually be hoisted out of inner loops at compile time. But this is not possible for C++, because the subscript checking, when enabled, is in the STL, not the language.
The second big problem in C++ is the need to obsess on "who owns what". Memory allocation is the nightmare of C++. Again, the STL tried to address this, and again, it was botched. The auto_ptr debacle illustrates the limitations of the language. There have been many, many attempts to implement "smart pointers", and they're all unsafe. At some point, you have to extract a C-type pointer to get something done, which introduces a hole in reference counting. If you don't extract raw pointers, you spend too much time updating reference counts. Again, this is something that a compiler could optimize if the compiler knew more about what was going on. But with reference counting implemented at the macro level of templates, that's not possible.
Garbage collection is occasionally proposed as a panacea, but it's not compatible with the concept of destructors. In a garbage collected language, what destructors and finalizers do must be severely limited. This is contrary to the C++ concept of "resource allocation as initialization". You don't want to close a window from the garbage collector. Also, introducing garbage collection introduces a form of concurrency, in a language that doesn't handle concurrency well. There are workarounds for this, but like most workarounds, they're painful. Take a good look at how Microsoft's "Managed C++" approached the problem. It's wierd; read about "resurrection [c-sharpcorner.com], where an object comes back to life during garbage collection.
Those are the two elephants in the living room of C++. Denying them will not make them go away. This is harsh. But it's not wrong.
Leadership (Score:4, Interesting)
talking about them being dead and that was one of the better moves
I've made in the stock market... I imagine all the Sun people are
really concerned too; they're as good as dead. I suspect redbull is
killing coke too, they are probably dead.
I like C++, I like the idea and the intent. After spending like 10
years going through standards processes, I actually like the end
product and the STL and what have you, it's substantially more clean
that it was in 1991. I think they got a good 80% of the way there.
There is still some jankiness though.
I think the thing with C++ that is larger is that they are still old
world. There is no quick movement and there still isn't any "21st
century" development style in the standards group. Java has warts but
one of the great things it has going for it is Sun produced a lot of
standards and then the jakarta group did the same and there tends to
be a lot of similarity between "high quality" java products and
components. There is a ton of java stuff to reuse and the code tends
to be be laid out in a similar way, built in a similar way, javadoc is
used, xdocklet is used, etc.. C++ doesn't have any of these standards
working for it and there aren't any major projects (maybe KDE and QT)
that are really sort of laying out the guidelines and building
reusable components. In short, nobody is really showing everyone else
"how to do it." I think that alone has accellerated java at a
remarkable rate.
Beacuse of all of that, I don't know of a lot of good high quality
C++ reuse. There are some knickknacks that might be reused. Then
there is kind of this whole-world style framework, like QT which
includes tons and tons of stuff. Simple little libraries don't seem
to be popular because there are so many different ways you can use
them, different conventions, etc.. Every time you start a C++
project, you're starting over from scratch. The other thing java has
helping it is the class library. You cna buy Roguewave or something
but there isn't a good opensource alternative. Boost is kind of
filling the gap but it's still a little project and I think the scope
has stayed fairly small for a lot of reasons, many of which are
political.
Part of this is the C legacy and the C++ attitude, it let's you do
things "your way." And the languages tries not to do "too much" yet
it's supposed to compete with higher level languages that are totally
tricked out with features and libraries. I think if you were
starting a new large scale application project and Java wasn't an
option and mono/.net wasn't an option and you were looking at C++,
GNAT would also have to be considered (as radical a thought as that
is) because I think there might be as much or more high quality
reusable componets that you could harvest for it.
It just needs a really strong leader and some community built up
around it. Define some common framework rules. Write a couple
frameworks, if I could just instantiate a socket class (with SSL as a
yes/no flag) and create a high performance and high quality C++ server
network server in a small chunk of code, in a standard like way,
that'd be cool. Imagine that it had some template based policy stuff
that allowed me to plugin validators and crap like that and we created
a nice reusable network component and started to make some of the
security holes in that stuff go away... Simple and clean, reusable.
WOuld you write your own server everytime now or would you use this
one?
Re:C++ has its place (Score:2)
I would love
Re:C++ has its place (Score:5, Interesting)
C++ remains as the only proper object-oriented language. Despite all the years of continuous development in languages, there has yet arisen an overall better object-oriented language. Yes it's ugly. Yes it's cryptic. Yes, it explodes often. But there isn't another language that does things better.
C++ the "only proper object oriented language"?!? It started life as a kludged on Modula extension to C. It has evolved into an overly complex language that includes elements of many programming paradigms, but implements all but the procedural ones poorly. The procedural stuff came from C anyway. Objective C is far closer to a "proper" object-oriented language, adding the minimum to C to give it OOP features. Smalltalk itself is the purest OOP language.
Java - Oh wow, a language that inherited the syntax from C++. Also completely controlled by a useless business committee. Tack on the JVM and you have yourself a C++ killer! Oh wait...
It inherited procedural syntax from C, not C++. The OOP aspects were inherited from Objective C and SmallTalk, along with a class library that owes much to NeXTstep/OpenStep. Gosling and other Sun engineers must have been exposed to NeXT's development platform during the brief Sun dalliance with OpenStep. As for being controlled by a "business" committee, my experience of Java's evolution is that it was largely driven byb engineers at Sun. Anyway, Stroustrup and the ISO committees haven't done a great job with C++.
As for being a C++ killer, it seems to be exactly that at my current employer. Our content delivery systems have been rewritten in Java and C, replacing a C++ monstrosity. Our only outsourced application is in the process of being rewritten in Java rather to replace the current C++ version from the same vendor. C++ ain't just dying, it's dead here.
C# - Like Java, but worse. Switch the Java committee for a Microsoft one. Switch JVM for .NET. Stupidity for everyone!
Although it's just Java for Windows, C# is a much more elegant language than C++.
Objective-C - Is it used ever outside of Apple development?
Why's that, doesn't development for MacOS X amount to much then? Plus, the Cocoa APIs are far more elegant than the hideous STL abomination.
Smalltalk - Nice and pretty. And unheard of outside of the niche.
It was ahead of it's time, but obscurity doesn't mean it's a poorer language than C++.
Python, Ruby, etc. - Often considered too slow.
Only in urban myths.
Re:C++ has its place (Score:3, Interesting)
Only in urban myths.
No, in practical use. Try doing something like image processing in those languages; or (perhaps more realistic) parsing a large XML file with native Python or Ruby code. Now try it in a C++ or Java parser. The difference in speed is phenomenal.
Re:C++ has its place (Score:3, Insightful)
I've done a lot of XML (and SGML) parsing using toolkits written in C, Perl and Java. The C ones (expat, libxml2 and several commercial packages) were quick, although the nature of XML means that a lot memory allocation goes on. The Java and Perl toolkits behave well because memory is pooled at the userlevel, rather than requiring many malloc calls. Image processing on the other hand, is why the system I mentioned above has some parts coded in C. ImageMagick, using the raw C API, narrowly beats a similar pr
Re:C++ has its place (Score:2, Interesting)
Stuff like the JVM,
Re:C++ has its place (Score:2)
Why's that, doesn't development for MacOS X amount to much then? Plus, the Cocoa APIs are far more elegant than the hideous STL abomination.
Shouldn't be using STL (Think you meant MFC?) anymore... use
Re:C++ has its place (Score:2)
Shouldn't be using STL (Think you meant MFC?) anymore...
Nope, I meant STL, the standard template library not Microsoft Fried Chicken which is a horrible OOP API on top of a horrible procedural API for an even worse operating system.
Besides why would we compare a language that is available on what, 5% of end user machines out there (I think I am being generous) whereas every other language is operating system independant (except for c# - but Microsoft windows has what, 90%+ market share? And the compi
Re:C++ has its place (Score:2)
Re:C++ has its place (Score:2)
Re:C++ has its place (Score:2)
Re:C++ has its place (Score:2)
Python, Ruby, etc. - Often considered too slow.
Only in urban myths.
Huh? You had me until you said this.
What I meant was, that while on paper interpeted languages like Perl, Python or Ruby should be slower (plenty of runtime type resolution, higher level constructs, etc), in practice things like memory pooling and sophisticated JIT-style interpreters means they are often faster than the equivalent application written in C or C++. To make the most of the potential of C/C++ means expending
Re:C++ has its place (Score:2)
Rubbish. Nobody ever claimed that Java was the right tool for the same niche as C, ie OSs, device drivers and speed-critical apps. C++ is in this niche, Java isn't.
C# - Like Java, but worse
I'd be interested to see why you think everyone else is wrong, and C# is worse then Java.
Re:C++ has its place (Score:2)
C++ remains as the only proper object-oriented language.
Really? Lets ask someone else's opinion on the matter:
Hmm, I think I'll beg to disagree with your quote.Re:C++ has its place (Score:3, Informative)
Common Lisp - Fast nowadays, powerful, flexible, but everyone ignores it.