C++ Creator Confident About Its Future
bonch writes "Bjarne Stroustrup is confident about the future of C++. He says there is a backlash against new languages like Java and C#, and that developers are returning to C++." From the article: "He claimed the main reason why people are not aware of this is because C++ doesn't have a 'propaganda campaign.' Sun Microsystems has touted the use of Java in the Mars Rover program, for example, but Stroustrup asserts that C++ was also used.
In this article, I seek to dispel the myth that non-C++ languages are beneficial in proper Software Engineering. I outline how standardization on the C++ language can strengthen your corporation's bottom line. And I describe how to contact the men in Congress to have C++ use finally made legally mandatory.
C++, a programming language invented by Lucent's Bjarney Strupstrup in 1995, has been hailed as a God-send to Computer Science since its creation. Based on Richie Kerninghan's language "C+", C++ brought several previously-theoretical programming languages features to the mainstream:
Church-Rosser Compliance
Known as "multiple inheritance" in the programming world and as "being Church-Rosser" in academia, C++'s compliance to this IEEE standard immediately placed it head-and-shoulders above other languages. "Churrossity" allows programmers to use blocks of code, called "objects," in place of other blocks of code ("arrays".) The layman can think of this as "allowing 'new' code to 'run' old code." This advance has not been possible in previous logic-based languages such as Ada.
Multi-Byte Characters
C++ allowed use of "Beaster," a subset of Microsoft's COM ("Common Object Model") windowing layer. The Beaster system allows non-English-speakers such as the Welsh to use computing technology, as it could redirect the signals used to display non-English characters on a computer's monitor screen or laser printer. It is also useful in helping the blind, who speak a specialized subset of English called "ALS."
Pass-By-Text
A non-recursive pass-by-text mechanism existed in Kerninghan's C+, called "macro facility." But Strupstrup did Kerninghan one better with the "String Template Loader" variable passing mechanism, which allowed text to be passed to procedures at run-time. This sped up code execution times, as code could be compiled while the user was running the program. This eliminated speed loss caused by incompatibility from obselete computer chips (Motorola and ADM.)
The superiority of C++ over other languages should be obvious. But is switching to it from other languages possible in your corporation? Astute observers will note that the eco-terrorist group FSF produces a C++ compiler called "DJGPP." Under President Bush's War on Terror, any organization supporting a terrorist organization is recursively itself a terrorist organization.
Corporations needn't worry. Microsoft has its own C++ offering, "Visual Studio." As an added bonus, Microsoft Visual Studio is highly standards compliant. It features a visual programming interface, and several features not found elsewhere (such as a visual debugger and an AOL instant messanger client called "Windows Messaging".)
But these advantages can only be realized if code written in inferior languages can be kept from polluting the inter-web eco-space. When compilers for other languages are available, low-level managers are tempted to write code in them. Why? Often times, managers are brought up from the ranks of Software Engineers, and thus lack an Executive's sense for using the right tool for the job. When these managers write code in a jungled zoo of languages, code in one program is unable to interact with code from another program (churrossity.) Only by standardizing on C++ can all programs run together smoothly. Using C++ to eliminate software errors will jump-start the sagging technology industry. This will boost our economy as a whole, which in turn will help us to win the War on Terror.
The effort to legally mandate this has been going on for a while. But it needs your
Creator?
OK, mod me troll, but surely C++ is by definition an 'extension' of C?
So, creator is a big word. Or perhaps the lack of context is the problem? Or maybe I'm just a language nazi?
mod me pedant....
Screw you all! I'm off to the pub
it seems that with corporate support, Java and .NET technologies, as well as Perl, PHP and Python are the major languages for the future, not C++.
.NET may be the future for enterprise software, developers should learn C/C++ first, and not Java, as those who can program effectively in C and/or C++ tend to code better in Java and .NET, while the reverse is not true.
Apart from PHP and Perl, the above languages are usually very strict in their object-oriented ways, and thus prevent loose syntax and clumsy errors. But this nannying produces only poorer developers who rely on the language rather than their own abilities to code effectively.
A return to C++ would be nice, especially in educational institutions, as it provides all the necessities of modern languages, bar effective string-handling, while maintaining the simplicity of older languages.
While Java and
"...Stroustrup asserts that C++ was also used.
I bet he also trys to catch all the code NASA uses.
www.lucernesys.comHorizon: Calendar-based personal finance
I never saw the point of C++.
:-)
I've been programming a while. Familiar with Lisp, Smalltalk, etc. My first "favorite" language was C, which had a certain simplicity that appealed to me. I also liked Objective C.
When I first saw C++ it seemed complicated and half-baked. Objective C was SO much nicer. And one C++ program would work with one compiler, but not another. The language was in a state of flux apparently. So I ignored it, thinking it would be finished later.
By the time I looked at it again, computers were fast enough so that "scripting" languages like Python were practical for big projects, and elegant enough to write good programs in. C++ was still a gigantic clunky mess. I remember seeing those "What's wrong with this program?" ads with C++ examples and being utterly confused. And any language that "mangles" things should be avoided I think.
Also Java looked like "what C++ should've been".
And now the programming world seems to be returning to a desire for simplicity, elegance, "Agility", and C++ just doesn't cut it. My favorite language today for practical work is Ruby, with the occasional C extension.
So, to me, C++ is an obsolete language.
...like any language that has had its time in the limelight. There are millions upon millions of lines of code written in it, and a lot of that isn't just going to be rewritten from one day to the next, no matter how much buzz and hype Sun and MS spew forth about their new languages.
6 791/0418_welton.html
I wrote an article about the economics of programming languages that talks about this and other issues that concern the adoption and lifecycle of languages, although be forewarned that the login system is a bit fiddly:
http://www.byte.com/documents/s=9553/byt111384524
http://www.welton.it/davidw/
Data from analyst firm Evans Data, which carries out regular developer surveys, appears to contradict Stroustrup's claim that C++ is growing. Evans Data has found that the percentage of developers using C++ has steadily declined over the last six years--from 76 percent in the spring 1998 to 46 percent in fall 2004. But it expects the rate of decline in C++ developers to be "considerably slower" in the next few years.
... especially Java zealots, try reading Modern C++ Design by Alexandrescu. It'll blow your mind. Java generics don't even come close.
If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
I wonder why people bother with things like C# or Java. They don't seem to offer any big advantages over C++. On the other hand, all I've heared of C++ and all I've seen of it and learned of C basically was horrible. I mean mucking around with pointers is something that can be fun, but it definitely doesn't have the beauty you need for doing real work. However there are alternatives. Just look at Ruby, a completely object-based language. You can do thinks like "Hello World".length, or -113.abs . You do not need to care about creating and destroying objects since everything is done in a really nice way. It is extremely powerfull, enabling you to examine and modify your own program code at runtime. And it's even clean at that. I definitely wouldn't want to start any new projects in C# or Java, but C++ also wouldn't be my first choice.
I program for the PC only as a hobby. At work I use only C and program only embedded systems. My industry is strongly and almost universally prejudiced against C++ as they believe it will result in slow applications.
The basic reason I don't use C++ is the lack of sensible libraries as part of the standard. A programmer desirous of learning cross platform GUI programming has to rely on libraries that are not a part of the standard. I haven't poked around that field for a while now, but IIRC, each system had its quirks and arcane additions. For example, MFC (not cross platform) and QT have implemented their own version of various containers, string classes, etc. MFC relies heavily on arcane macros, QT relies on a weird (from a pure C++ point of view) MOC. I understand they both had good reasons for doing that when C++ was still evolving. But today, it is just a hinderance when trying to write "clean" code.
Another disadvantage of not having a great collection of libraries in the standard is that people won't know about them unless they dig around a lot. Introductory text books won't cover them, help files in the system won't cover them (if they do, a beginner in that field might not even know what to look for and where to look).
Do you want a OO library for accessing the serial port? OK... which OS? Windows: use MFC. Linux: google around until you find something on sourceforge. What about some GUI and audio libraries? again, similar method. Fine... now the application has used various libraries from various places. The source now looks like it was done by a person with multiple personality disorder, with each library having its own design and coding approach. Now that you have built an application with ten different sources of libraries, you have to keep track of all of them for bug-fixes, performance enhancementes. Each with its own quirky impact on your application. I went through all this, and eventually gave up C++ in favour of Java.
And this is just the beginning of my woes with C++.
This is not my sig.
The ideal way of doing things is to write as much as you can in the scripting language. This is almost always faster and more efficient in terms of programmer time. Then, you go back and redo the speed critical bits and pieces in C or C++.
When this dawned on me, I really began to appreciate Tcl a lot more than I had in the past. It's C API lets you do a ton of fun things. Multiple interpreters, stacked channels, all kinds of access to variables and commands. And the original source code is extremely legible should you ever get the urge to hack on it directly.
http://www.welton.it/davidw/
Java Generics is not even an attempt to come close to template programming. BTW, this book is quite neat but misses more advanced topics about templates. Take a look at the boost libs.
Ah, and, I heard you can shoot your leg off with C++. Blowing my mind? Maybe worth a try.
However, it's a double-edged sword. It has been said that C lets you shoot yourself in the foot. C++ provides a dozen ways to shoot yourself in both feet and your own back, simultaneously. Be carefull.
Many have tried to design languages to protect the programmer from themselves, i.e. by providing native garbage collection, disallowing bald pointers, etc. However, this is short-sighted. It presumes what is "hard" and prevents the skilled programmer from replacing the default implementation. C++ new and delete member functions provide no-fuss custom memory management... and probably account for probably half of those ways of shooting one's self in both feet and back.
A language that is complete in the sense of permitting the coding of fundemental facilities is seductive. It provides an assurance that one can implement "low-level" stuff like memory management, or even the bulk of an O/S kernel in it. The lack of I/O facilities in C, for example, is an intentional feature, and not an oversight. Never have to learn another language again.
Other languages may provide the convenience of built-in capabilities that are useful for a particular task at hand: awk, perl, and the rash of modern scripting languages come to mind. When the shoe fits, the adaptable programmer will take the path of least resistance. Languages like Java and C# attempt to bridge the general-purpose languages with the protection and features offered by application-specific ones, the latter via extensive run-time libraries (.NET, anyone?). They tend to return to the pseudo-compiled small-interpreter model to provide hardware portability.
The problem is, that one has do do things the C# "way", or the .NET "way", or the Java "way". Multiple inheritance? Oooh, it's so hard to implement right, and can be so confusing, and, admitedly can be expensive at run-time, so we'll not provide it. Mixin becomes a hack, with language keyword support. Over time, syntactic sugar in the language provides clever support for things like iterators, but binds language features to what should be artbitrary types (Lists are special in C#, for example).
Well, I want it all.
A programming language that will let me shoot myself in the foot any way from Sunday if I dare to try... but, with the flexibility to let me say, "Nope. No bald pointers here." Segregation of programmable expressiveness by program, not language, design.
A programming language that is mutable, so I can invent my own brand of syntactic sugar, and the support to let me quickly find out what mutations a particular piece of code uses.
A programming language that lets me choose when to evaluate things. Do I want this figured out at compile time? Link time? Load time? Run time? Sorry, C++ templates, though Turing-complete are about as maintainable as APL, if one uses them for anythng clever.
It's too bad Mary2 never caught on.
Many will argue that mutable languages result in unmaintainable code: which mutation is in force? I would counter that programs written in non-mutable languages are equally unmaintainable if one does not understand the design of the application. Sure, one can see the "trees", but not the forest: I know x = a + b adds a and b to yield x, but what is that for? The effort to undestand what mutations are in effect is likely similar to the effort to understand an application's design. Except, one has the advantage of a known meta-syntax for expressing the mutatations, instead of having to rely on a design document (which may not exist), likely poorly written or out of date
You could've hired me.
All those C dialects just add features that you mostly don't need. Ok, the C++ object syntax ( instead of in C) is nice.
Still, the real shortcomings of C aren't fixed, such as braindead syntax, only a single return value for functions (but a function can have 5 parameters; why?), lack of tailcall optimization, braindead calling conventions...
You might even say that makes the syntax even more braindead.
I don't really know Ruby, but at least it does OO righter than Java&Co (like Smalltalk, too). My language of choice these days is Common Lisp.
When I was in college for my CS degree, the focus shift away from C/C++ and towards Java was beginning. I was lucky in that my early CS programs were still in C++. However, the classes right behind me as I moved through were getting shifted over to Java one by one. I did not like that at all. It just felt wrong. I figured maybe I was just being biased since I learned C/C++ pretty much on my own without the aid of classes.
.NET technologies. The magazines all had big pushes for Java, C#, VB.NET, etc.
:-) Everyday we have to deal with huge bloated Java web applications that melt CPUs, eat RAM, and are so slow it takes boxes with 11 CPUs just to service a few thousand customers. The distaste for Java that begins in our department has been filtering up the layers and is starting to become apparent to some of the people who build these projects. When you line up a huge app in PHP next to one written in Java, why is it that the PHP one can easily outperform it on less hardware and require less people to maintain it? That all translates to big $$$$ not to mention application stability and performance.
After graduating with my BS in CS, I was out in the field for a few years. I spent some time at a C++ Windows shop which was trying to become gung-ho about C# and the various
I left that place and moved into a contracting position where I help admin a data center. The attitude there is much different, to say the least.
I'm also now studying for a master's degree in CS. Since I had been away a few years, I was not surprised when I came back to see Java everywhere in the undergrad classes (this at a different school than before). What did surprise me is the attitude of one of my new professors. He taught a projects class where the whole point of the class is to build/do something by the end of the term. It doesn't matter what as long as it fit the basic subject area of the class. After that, you're pretty much on your own (or in a group, if you want). Since this was a different school than where I got my BS, I didn't know this professor. I had seen him wearing a Java shirt a few times, so I was prepared to have to deal with some friction when I went to suggest that I wanted to do my project with C++. One day I stayed after class to chat with him and get to know him a bit. I was shocked to discover that he had done a lot of postdoctoral research using Java and about Java and found it lacking in many very important areas (specifically in high performance scientific computing applications). As we were walking out of the building, he was asking me about my background in programming and computers, so I was giving him a mini life story sort of thing. I mentioned my C/C++ upbringing and how in my college days the Java shift had begun and I didn't quite feel comfortable with that and how I see it seemed to have happened everywhere. That's when he took a careful look around the hallway, leaned in, and said in a hushed tone, "Switching to Java for the undergrads is the worst decision this department ever made."
I was pretty stunned to hear that from a professor considering what was going on just a few years previous. I hope that sentiment grows and CS departments take back their programs from corporate interests and marketing machines. Perhaps there is hope...
Hexy - a strategy game for iPhone/iPod Touch
Yes, there is a niche for C and that is rather high speed fixed length data-processing. But I don't know the niche for C++ yet. OK, KDE is written in C++, but otherwise I wouldn't start anything in that language, mainly because reality shows that it's hard to write programs properly in that language. New messages about buffer overflows only possible in C(++).
Before some people complain that C is so much more efficient than all the rest. Just look at how strings are typically done in C and tell me if it's really efficient to use 1kilobyte for a string that typically is just a few bytes long, just so you won't run into buffer overflows?
Isn't this copied from http://www.adequacy.org/public/stories/2002.7.4.18 3710.3582.html?
IIRC, most game programming is done in C++. I know Half Life 2 was written in C++.
Here's a question for everyone: Which is better? An expertly designed and elegant C++ program with all the proper abstractions, frameworks, and methodologies that 1% of software developers can comprehend quickly, or a C program with a flat set of files, simple structs, and a few shell scripts to build it, which everyone understands (and can even debug)?
Trying to answering this question tears me apart, because I so much like the _idea_ of elegant OO software design. However, I generally find that I can work my way through a C program much more quickly than a comparable-complexity C++ program.
Perhaps it's just me.
-- Microsoft is the most expensive commodity operating system and office suite vendor in the marketplace.
It doesn't matter... but you can do this in C#
System.Console.WriteLine( "HALLO!".Length );
System.Console.WriteLine( 114.ToString("ABC{0}DEF") );
Anyway... "USE THE RIGHT TOOL FOR THE JOB!" A device driver in Rugby? An office suite in assembler? Every language/platform has good things and bad things... and there are many intersections in their application where a developer can decide which language to use for the job.
See objective C with GnuStep as base for the next gen C based frameworks and low level languages, than having that monster without decent classlib C++ rising again.
Sorry, been there, done that, but the widespread usage of C++ was one of the biggest history jokes ever. A language, as bloated as a language could be, with lots of cool features on the language level, but ommitting the two most important aspects, a good standardized classlib which covers all important application scope aspects, and a language which is actually usable without having to fight with it for years before being able to master it to a certain degree. There was a reason why people flooded to java in 97-98, it was less the hype, it was more the fact, that people tried to implement big long running systems in C++ and saw it was not really feasable in a decent timeframe, due to constantly crashing problems thanks to the missing boundary checks, memory leaks thanks to the missing garbage collector, and general programming errors and unreadable code, thanks to the byzantine bloatware the language in fact really is. Add to that the compiler bugs caused by the 1200 pages of language specs and you could see why people were fleeing from C++.
And up to date, whenever I have to talk about C++ I only can give the advice, limit yourself in the usage of features and only use a readable subset of it (which would be similar to java and C#), try to omit the C heritage entirely if possible, do not use preprocessors, do not use extensive operator overloading or templating. And check out the KDE/Qt API, they so far have been the only ones to master the language on a design level which in fact results in readable and maintainable code.
tell me if it's really efficient to use 1kilobyte for a string that typically is just a few bytes long, just so you won't run into buffer overflows?
I prefer to check the lengths of the input...or use a library allowing for dynamic strings. Such things are possible in C.
Honestly game programming is a good niche for C++. Games typically don't run for a long time. They work with fixed sized inputs and need to be fast.
"Still, the real shortcomings of C aren't fixed, such as braindead syntax, only a single return value for functions (but a function can have 5 parameters; why?), lack of tailcall optimization, braindead calling conventions..."
Uh, what's wrong with the concept x = f(a,b,c,d,e)?
C does allow any number of parameters, but less parameters means more of them can fit into CPU registers (e.g., i0-i7 on SPARC).
Here's a question for everyone: Which is better? An expertly designed and elegant C++ program with all the proper abstractions, frameworks, and methodologies that 1% of software developers can comprehend quickly, or a C program with a flat set of files, simple structs, and a few shell scripts to build it, which everyone understands (and can even debug)?
The simple flat file C program that everyone can debug is also a small program. OO really comes into it's own when you get over 20,000 lines of code. Then the kiss C style starts breaking down.
Of course one must use the right tools for the job. But honestly, once you have seen Ruby, you want to do many things in it. The problem today is that programmers have no choice. Either because of company limitations, or because they just don't know of the alternatives. Programmers today only learn C(++), Visual Basic (what's that good for?) and perhaps Java or C#. They don't learn the really different languages like Prolog or Lisp. And that's where choosing the right language is important. There are problems like XML-decoding or native language parsing where you can write your programs in Prolog in just a fraction of the time needed in C or Assembler or C# or Java or whatever.
With well-organized header files and a little documentation, I've had no problems with C up to 100K lines. The main advantage, IMO, is that C is just so damn simple to "execute" in my mind, and it is very intuitive to step through in a debugger. The only real catch for me is tracking down memory leaks at times.
Now, for programs with millions of LOC, I don't think any language will be easier than another, just because the program's own complexity overwhelms everything else. Just ask people how quickly they can get up to speed on OO.org, KDE, Mozilla, or GNOME (they all suck for casual developers).
-- Microsoft is the most expensive commodity operating system and office suite vendor in the marketplace.
That is a general problem, I did most of the stuff in the last years trying to cover with good OO design and patterns, but I constantly find myself in a mess of too many classes to cover a domain, functionality which is split over several classes, which are layered. Many classlibs I have seen have similar problems, due to the fact that excessive pattern usage enforces heaps and heaps of classes covering domains, which probably could be easier covered by a few hacks within a procedural domain.
I am not against OO and patterns, in fact I lovem them, but from a maintainability standpoint they easily can become a nightmare. But that is not a problem of c++ it is a software enigneering problem per se.
You've also clearly never done serious programming with the Standard Template Library, where the algorithms are written so generically--and so consistently across different data types--that they can be plugged together in an almost limitless number of configurations.
Um... Sir, question: How is "Hello World".length any better than length("Hello World")? Or how is -133.abs any better than abs(-133)?
Free of Flash! Free of Flash!
Yeah, one thing is that some people spend so much time trying to understand and memorize design patterns they can also not spend enough time learning the problem domain. The result is poorly applied patterns that overlap or don't really fit the problem at hand. The cure is worse than the disease.
C++ started out as an extension of C, but the two quickly diverged. C++ is not a superset of C; it's an entirely different language nowadays with a syntax clearly borrowed from C.
A trivial conversion exists between any ISO C90 program and ISO C++, but then again, we have FORTRAN-to-C translators and nobody thinks C is an extension of FORTRAN.
Stroustrup would also likely be a little uncomfortable with the appellation "creator". While he's certainly been one of the pivotal figures in C++, Stroustrup has always been quick to recognize the contributions of other people and the work of the ISO standardization committee.
Well, any number of parameters can go into a function, but only one can be returned. That's braindead. Python, ML, Lisp can all do better.
If the parameters and return values are passed in registers or RAM (e.g. on the register-starved x86) is irrelevant to the question (just an implementation detail).
I'v been coding in Perl, Java, C and C++ for the past few years and although I prefer using perl and bash I must say that I've learned to think like a programmer having learned C++ first.
,C++ should be taught before Java.
I also eneded up taking a C++ course in High School, and I found that many of my classmates started to think and analyze problems differently. A year later the school changed from C++ to Java ( because the CollegeBoard changed it's CS exams to Java). I also took that class and I noticed that the kids that only took Java, even after completing the course did not learn much - and especially not to think like programmers. I think that this is most likely because Java has so many libraries within that the kids never actually learn what occurs in the "back end." Many fail to understand what a string is, and the majority did not understand algorithms at all, I dont want to mention efficency. Although Java is probablly used more widely, I think that for beginners to learn to think like programmers it would be better to learn a language from which they can learn the basics behind programming, and although I would suggest PASCAL (better for learning algorithms)
Learning DSA with Java is a bit funny, how is having a garbage collector efficent and how will that inspire programmers to write more cautius and efficent code?
Just my opinion, I'd like to learn more.
Especially in C++ you would rather use string classes instead of char pointers, so buffer overflows easily disappear. People only have to make the jump, port their char pointer code to use better string functions.
Why do you think that C strings use 1k per string? A string uses as much memory as you allocate for it. I typically use an input buffer, and when a string is completely parsed, copy it somewhere. A string of size 30 uses 30 bytes and 4 bytes for its length (or alternatively 31b for the typical C string + padding).
C++ is faster than java / C#
C++ has better templates
There is so much C++ out there that no one should ever use another language, or they will be forced into reinventing the wheel
Using a "simpler" language like java means that you will hire crappy programmers. Don't do that - use C++ and hire really good programmers.
Having worked on Wall St. as a programmer for 15 years or so, I'm sorry to say to all the people who constantly make that argument that they are officially behind the times.
The real reason to use java?
Compilation times
Compilation times
Compilation times
When programmers are a major cost (believe me, at Wall St. firms, they are a huge cost compared with the cost of machines), you should optimize the amount of time they spend waiting for compiles. We have a C++ library that is around 250,000 lines of code, that compiles in around 2 hours (and this is after a lot of work to try to make the compilation as fast as possible). We also have a 1,200,000 line java library that compiles in around 3 minutes. Any way you play it, programmers still spend a lot of time in the write code / compile / test cycle. In fact, this is where they spend most of their time.
In terms of performance, that is largely a myth that is no longer true. We run pricing simulations in java (which is about as computationally intensive as it gets) and we are able to do so at the same speed is the equivalent C++ code. In fact, the java code is a bit faster now, as the tools for finding the bottlenecks are much faster.
The hiring market? This is largely moving towards java. Many schools are not teaching C++ any more.
The work problem? In java, you spend much more of your time working on the business problem, and much less time trying to figure out why GCC arcane error message on file X means that your template is out of whack in file Y. Or in C++, trying to locate the source of a core dump (getting java.lang.NullPointerException is SOO much better).
Now, mod me flame.
C++ is an extremely powerful language, but it is not a friendly one. It takes some time to grasp all its features, but the time is well worth it. For example, I am familiar with a constrained optimization program from ILOG, written in C++. It is very powerful and fast. I can't imagine in any other language. Of course, it can be implemented in any language, but not with the same ease of use.
If you want to do any real graphics work, including games, then C++ is the only language out there. Anything else is just too damn slow.
>Um... Sir, question: How is "Hello World".length
>any better than length("Hello World")? Or how is
>-133.abs any better than abs(-133)?
Good question. The point is, that everything is an object, numbers, lists, even program blocks are objects. Therefore, for example, it's rather simple to make iterative functions. You just pass a program block as a parameter to a message and the method can then call that parameter. (I might have gotten the terminology wrong.) Best of all it's all done in a clean form.
Then there are things like lists of all the object-instances in your program. You can iterate over it, find the type of each one, no matter if it's an integer or an object reflecting a large database. You can then find out more about that object, even if it didn't exist when you were programming that part of code.
Of course that's also theoretically possible with C(++), but there it involves doing a lot of dirty stuff like shifting pointers to get arbitrary access to your programm's memory. In Ruby it's all nice and clean. The -123.abs is just a consequence of it. I mean there are no procedures or functions anymore. It's all in the objects. And everything is an object.
If you want code that is clear and well organized I'd suggest you leave the C/C++ area completely. They are (together with Perl) famous for redundancy and obfuscation. The expressiveness of C is not that good and it is much too easy to harm yourself with it. Bigger C-projects are not very maintable, or if they are then *even though* they are C-projects. What C++ gained in expressiveness it also gained in obfuscation.
...
<advertisement>
The language is very baroque and while I'd say that RAII is a definate achievement it does not justify the use of C++. If you aim for high quality, maintable programs I would recommend to use Ada95. It is expressive, has threading primites built in, excellent embedded and realtime support, generics, exceptions, fixed-point precission,
Do yourself a favour and visit http://www.gnat.com or http://www.adaic.org to learn more.
</advertisment>
I think a lot of people in this discussion are missing the point. C++ and Java are just tools for learning and doing computer science. The whole point of a degree program is not to learn how to program, but to learn the theories and ideas of development. Learning to program is a side-effect.
Tools like C++ and Java will age and eventually get replaced. You'll need to learn a new language next year and something else the year after that. The theories and ideas learned in CS courses will last you a lifetime. That is why people without degrees have serious gaps in their knowledge and what makes the degree so powerful in the first place.
Well the problem here is between reality and the ideal. Of course one could use the better string functions, but (almost) daily reports about buffer overruns tell another story. In classical C programmers probably tend to oversize their strings instead of properly sizing them. It's just less work and you are on the save size.
So whitespace is objects too? Waste of resources, I say!
C++ takes quite a bit of flak on here, mostly because it doesn't try to be a 'pure' language. It is obvious that people don't understand it by the comments. (Then again, if people only talked about what they understood, the net would be a very quiet place.)
News flash: most software that I've seen and written benefits from multiple paradigms: procedural for basic algorithm implementation, OOP for the architecture, and generic programming as glue code (generic programming annihilates OOP in terms of code reuse, and you typically don't pay a performance penalty for it.) There are other paradigms, but I don't have enough experience to comment on the efficiency of them. C++ is one of the few languages that gives the aforementioned paradigms a presence and trusts the programmer to choose. You may think this is 'bloated,' but nothing is further from the truth: the overall mantra of C++ is, "you only pay for what you use."
You can bitch all you want about the importance of language purity and point to languages like Smalltalk or Java as an example of how software should be coded. I'll ask you to point me to popular desktop software that is written in these languages. C++ is the archetype of a hardcore language - a huge learning curve, but insanely powerful in the right hands. It is also really dangerous in the wrong hands.
Like operating systems, all programming languages suck in some way. Its up to you to choose the least sucky one for the problem at hand. I enjoy writing native, minimal dependency desktop applications in a language that has excellent tool support, can interface directly with OS APIs, and doesn't talk down to me. C++ fits the bill most closely, but I've been told I'd like O'Caml as well.
C++ isn't going anywhere. The fact that so many people don't understand it or the place that it occupies only strengthens my resume.
A fairer question might be what's right about it. ;-)
Seriously, the string-handling in standard C++ suffers horribly from design-by-committee.
To give the most obvious example, there's no way to write a literal std::string, which in turn means that basic syntax like "a"+"b" doesn't work, even though the + operator is used to concatenate std::string objects.
There are also glaring inconsistencies in usage, because of all the history using char*, and then numerous class libraries inventing their own string type. Take a look at the I/O streams interfaces in C++: you can't even pass a std::string as a filename without converting to a C-style string first.
Then there's the interface, which is a bit Jack-of-all-trades, and bloated with it.
And of course, even with a real string type now -- surely a prerequisite for claiming any meaningful string support at all! -- C++ still doesn't provide standard support for basic string processing using regular expressions. Compared to a more text-focussed language like Perl, well, there's no comparison.
Fortunately, a number of these sillies are in line to be fixed in the next revision of C++, but for now, the language's string support is pretty much a joke.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
I've heard that a lot, and certainly the argument has merit.
Where it sometimes breaks down, IMHO, is that learning a new language isn't free. It's a myth that any good programmer can learn a new language in a week. Sure, they can learn the basic syntax, and if they're familiar with the particular paradigms they're using (by which I mean OOP, functional programming, whatever) then they'll be able to apply those principles fairly readily. But there's a world of difference between that and the kind of clean, idiomatic, easily maintainable code than a good programmer with a lot of experience in the specific language(s) he's using would write.
I predict that this is going to be one of the bigger factors holding back $SCRIPTING_LANGUAGE from wider usage for a long time. There are simply too many almost isomorphic scripting languages with a significant, but still small, user base, and while they offer similar advantages, you can't just switch a whole dev team from one to another for the reason above.
I think this is also a big reason C++ remains popular, particularly with stronger programmers who make the effort to learn its idioms, who for some probably related reason rarely seem to encounter all these dreadful weaknesses C++ is supposed to have... In a nutshell, C++ is a single language with sufficient tools to work effectively with both low-level details and high-level designs, and perhaps a strong programmer with such a tool will be more effective than a programmer with two more suitable tools, but only moderate skill with either.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Dear C++ Returnee,
Welcome back! Let me assure you, the reasons you have left C++ in the first place are still present and awaiting your command.
That's a slightly loaded question, don't you think? ;-)
Any high-level design tools are a double-edged sword. When used well, they allow you to express designs more simply and clearly. When used poorly, they simply add another layer of complication onto whatever you had anyway. You can do this in any language that offers such tools.
FWIW, I've found that often the languages where you couldn't write obfuscated code if you really wanted to also lack the power to express clean designs cleanly as well. IMHO, this is one of the biggest problems with C++'s "successors" C# and, particularly, Java.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Mistake number one...
And how is this an advantage over
or evenin real life? Do you often find yourself taking the length of a string literal in real code anyway?It does, however, have the practicality you need for a lot of real work. I write C++ code that works with complex graph-like data structures for a living, and we use pointers all the time. Expressing the same structures, with the same fine control of data size (which matters when your graphs can easily have millions of nodes) would be more difficult in languages that obscure the concept.
OK, I confess: I've looked into Ruby seriously twice, and found it awkward and unnatural both times. I've programmed a lot of different languages in my time, from assembler and C to C++ and Java to Perl and Python to OCaml and Haskell. I've never seen a language that tries as hard to force the programmer into its mindset, rather than trying to provide tools for the programmer to express their intent, as Ruby does.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Actually, I parse -133.abs as -(133.abs), which is totally pointless. Perhaps the grandparent meant (-133).abs; however I still think that is pointless as well -- why not just omit the minus sign?
Seriously though, constants should only be defined once per program. Otherwise, you're likely to forget one when you redefine the value of the constant. Or worse: you may never have the same values in the first place.
But can Bjarne afford a C++ license from the SCO group, owners of the C++ programming language?
takes the features of C++, and reengineers them so that one has the power and efficiency of C++, but with fast compilation, true modules, automatic memory management, cleaned up syntax, etc. http://www.digitalmars.com/d/
. php?test=all&lang=all&sort=fullcpu
For performance of D, see http://shootout.alioth.debian.org/great/benchmark
So wouldn't it make any difference if, say, Mozilla was in assembly?
No one really considers assembly an applications programming language, any more, except perhaps HPC/graphics developers.
Of the four you mentioned, three (OO.org, KDE, mozilla) are in C++. GNOME is in C...
Yes, but they are all difficult to work with. That's just a fact of all projects that large, IMO. If it isn't a problem with C kludges, then its a problem with choice of abstraction or a problem with 100 shared libraries or a problem with poor performance or a problem with compiler interoperability, etc. C++ doesn't make these problems go away.
-- Microsoft is the most expensive commodity operating system and office suite vendor in the marketplace.
That's a slightly loaded question, don't you think? ;-)
Yes, but I think it is a valid one. At this stage of software technology, I just don't think there are _any_ good solutions for writing large, portable, comprehensible, etc. programs. Even the beauty of Lisp comes with baggage that keeps it from being used more widely. C++ is no panacea, either.
-- Microsoft is the most expensive commodity operating system and office suite vendor in the marketplace.
C++ Guru Scott Meyers just asked people, "Why do you program in C++?" If that's not relevant to this discussion, I don't know what is... (via Lambda the Ultimate)
[o]_O
This is unreasonable. Do you know WHY template programming is so powerful? It's because the template system is a fully functional programming language in and of itself. It's like a scripting language tacked on to the back of another language. It damn well better be better than anything else out there.
It would be like pairing Java and Python together. Absurdly powerful, but there's a lot of programmer-time overhead in learning and using the systems properly together.
Sad, but almost certainly true.
As I've said in these parts before, C++ should have been superceded for all areas of programming a very long time ago. The fact that it hasn't is a pretty damning indictment of the software development community as a whole, a reflection of how little "new" languages like Java or C# have really added, and an insight into how productive many theoretically sounder languages beloved of academics are out in the real world.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
C++ doesn't have a 'propaganda campaign.'
What do you call this article & discussion thread then?
GOBACK.
The binary compatibility of C++ object files sucks when face with slight changes to classes. I wonder if GCC 4.0 can use the new -findirect-dispatch flag to make C++ code more resiliant to the brittle class problem that plagues C++ and that Java handles so well. i.e., you can add new data members and methods to any Java class and not affect how other classes make use of it. This is due to Java's late-binding. C++ desperately needs this feature. Perhaps it will be added in C++0x as a side effect of adding introspection. I hope so, anyway. C++ needs better runtime dynamic features to compete with Java and Python.
I can't speak for the rest, but it didn't take me long to get into KDE development. KDE is designed well enough that I don't need to know the entire project to work on it. I've submitted a couple patches here and there. I've never looked at 99% of the source code, but I don't need to, since I can quickly find the area of code I'm interested in for the patch, fix it, test and submit.
Now KDE does need some experts who understand the entire thing, to make sure I'm not adding something that should be done elsewhere. However a good programmer should be able to jump in and fix things.
Yes, true. You can do graphics works efficiently in C++. But just look at the other things people do in C(++). They write Webservers in C. Programs which deal a lot with strings, where security is a lot more important than efficiency. A Webserver written in, lets say, Ruby might consume 5 times the CPU-cycles, but it's most likely free from any nasty buffer overruns. At graphics work that's irrelevant. You just have your frame and work with it. When dealing with vector graphics it's more difficult, but even then one rarely has to fill arrays with variable length of data.
> OK, I confess: I've looked into Ruby seriously
> twice, and found it awkward and unnatural both
> times. I've programmed a lot of different
> languages in my time, from assembler and C to
> C++ and Java to Perl and Python to OCaml and
> Haskell. I've never seen a language that tries
> as hard to force the programmer into its
> mindset, rather than trying to provide tools
> for the programmer to express their intent, as
> Ruby does.
Well it probably depends on where you come from. I do not really believe that something like x=y==z?23:42 is really natural. One problem I see with C is that one can use it, just like Assembler. You can write everything in any style in it. You can ignore everything the language provides. Then there are obvious paradigm shifts. For example C claims to be a structured language with little need for goto. Instead the case-statement is nothing more than on x goto in BASIC.
C in fact forces it's thinking on the programmer in a really bad way. If you don't follow the rules, you will not be punished immediately, the compiler will compile without any problems, but the program will behave in strange ways, impossible to understand by someone not intimately familiar with the whole system. If you do not completely follow the rules, you can write a "hello-world" program which seems to work perfectly fine in all your tests, but once someone has a long awkward name, consisting out of some binary characters, it will start to execute arbitrary code. Now don't say this never happens in real life. It does, on a daily base. Windows XP, for example contains such a bug. Connect it to the internet for longer than half an hour (or shorter if your connection is fast), and a buffer overflow will happen.
Cross-platform, flexible, powerful?
C++ is the most effecient language that exists. Check out the flipcode articles on template optimization of vector class implementation (Vector ala 3-space)
You are right about the multiple library integration approach has some downfalls. However that adds to the approach too... if you rely on one type of library you can always integrate it using your style and just inherit some of the classes or use containment. And if you don't like one library, swap it out for another.
You can do a lot with wxWidgets and that is one library under one roof
Here is the link http://www.tiobe.com/tiobe_index/tekst.htm
developer http://flamerobin.org
x=((y==z)?23:42) already looks a lot clearer, but you've got a point...
Well, you and your colleagues could bone up on the skills to compile large C++ programs, but you could also hire some people who are experts at IBM OS/360 JCL while you are at it.
Anyone here remember JCL? The idea was that you had a "separation of concerns" between abstract operations on files (Open, Read, Write, Seek, Close) and a whole panoply of file-specific parameters (disk, tape, random-access, sequential, block size, buffer sizes), and that you only had the abstract parts in actual compiled code while the connections between the abstract parts and the OS went into a kind of shell script that specified these connections. Then these guys in New Jersey came up with this Unix thingy which didn't have any of this stuff. Unix "solved" the problem JCL was addressing by not having that problem in the first place.
My point is not that Java is "better" than C++ -- there are many criteria in what language is suitable for what kind of problems -- but that C++ is so ancient history even within its own problem domain. Make files? Pre-compiled headers? The problems those features were meant to solve were obviated by Wirth and his gang back in the Modula 2 days just like Unix made JCL go away.
The suggestions you have rolling in to speed up your C++ compiles are all well and good, but the fact that people are calling you stupid. How about another analogy. The F-104 has some bad user-interface issues along with slim stall margins on landings. It killed a lot of pilots in its day, and the pilots who survived would all say that the pilots who didn't lacked "the Right Stuff", but I don't think there are any Air Force planes these days that are quite so unforgiving.
What I find interesting is that Delphi is roaring back, and it is not just a temporary blip caused by the new Delphi 2005. My guess is its not so much that people love Pascal but some big problem with Microsoft's .NET and their stand on Visual Basic 6.
If you want to do what Visual Basic 6 used to do (and still does, thank you), which is support plain-old-Windows without the .NET layers, and do it in a VB sort of way with forms and widgets and property editors, it seems that Delphi has become the only game in town (although I should look into RealBasic). Yes, there are the legacy/spaghetti VB apps, and yes, there are VB coders who don't want to learn, but I think MS is missing the boat. It is not that people don't want to learn VB.NET: what they want is a VBish thing for the old Win32 API without the .NET layer, and they are willing to learn a new language to get it. The problem is not so much with VB.NET as it is with just plain .NET.
I have a hard time blaming the language when the real problem is the developers not using its features.
Under capitalism man exploits man. Under communism it's the other way around.
Really, the biggest limitation is that there aren't as many class frameworks and they aren't as rich as they are in Java. Boost is doing some cool stuff, in corporate the in to the standard. Some classes to make it more network centric would be nice also.
Well the main problem with C(++) is that it forgets one fundamental property of all humans, they are lazy and want to do as little as possible.
It's amazing, but many/most libraries in C(++) are harder to use than doing things directly. In other languages, it's the other way round. Libraries are just trivially simple to use.
I've never seen a Webserver without dynamic content that actually uses more than a few percent of even the slowest server. A webserver just needs to shovel around data. There's little intelligence in it.
When webservers are slow, it's either because of the slow network connection, or because of slow dynamic content. There are people out there running gigantic sites on interpreted scripts. Slashdot, for example seems to run on Perl. Wikipedia runs on PHP, other sites run on Java or even ASP.
If speed would be a serious issue, there would be no ASP, there would be no PHP and Java would never have found it's way onto servers.
The speed of the http-deamon itself is rather unimportant as it only needs to move data around. A shell-scripted webserver will only be unnoticably slower than one coded in C, or even assembler.
It's amazing, but many/most libraries in C(++) are harder to use than doing things directly.
You clearly haven't spent much time working with assembly. You couldn't be more wrong if you tried.
Under capitalism man exploits man. Under communism it's the other way around.
C lets you shoot yourself in the foot rather easily. C++ allows you to reuse the bullet!
If you don't fail at least 90 percent of the time, you're not aiming high enough. (Alan Kay)
where professing ignorance gets you called insightful.
I do hope they removed the asserts.
'I am become Shiva, destroyer of worlds'
Please have CuminherTaco forward the moderation score to my many accounts. Thanks!
Yours in Christ,
<i>eSolutions</i>
I don't accept the premise of your question - you are offering a choice between 'simple' and 'elegant' but in reality they are the same thing. The only purpose of using object-oriented programming or any other technique is to make the program simpler and easier to understand. If it just obfuscates the code, then the feature has been misused.
Maybe you're being too hard on yourself and the 'comparable-complexity C++ program' you find hard to understand is just an overengineered mess. It can happen in any language but some languages make it easier than others, if the programmer lacks the self-discipline to keep it simple.
-- Ed Avis ed@membled.com
I should correct myself: there is another good reason to use a language feature and that is to help the compiler catch mistakes. A C++ program written using templates may be a little more complex than one using void* pointers everywhere and casting at run time, but it's less likely to have some kinds of bug. (At least, if you are a bad enough programmer to need all the help you can get from the machine - I know I am.)
-- Ed Avis ed@membled.com
Good you don't quote off the IOCCC. So C/C++ allows unnatural writing style. But you don't *have* to write that way.
DISCLAIMER: I've never written one line in Ruby, so I cannot comment on that.
Well some time ago, there was a story about someone using RFID tags to store sid-tunes. They also had the code online for accessing such RFID chips. It was easy to understand, even for a non Ruby programmer.
CODE:
0000 1010 1110 1001
END CODE
== binary direct CPU addressing natural language: I saw people analyzing fullscreen of those strange numeric signs for debug purposes
CODE:
lda #10
ldx (200)
jsr ffd2
ENDCODE
== Wow! more human readable mnemonics assembly code.
CODE:
#include
int main(...){
printf("Hello world!\n");
return 0;
}
== Ooh! It is called "C" language and it is a high-level assenbly language
CODE:
Program Learning_To_program_At_school;
uses System;...etc...
Type
End;
Var I:integer;
Procedure blah;
Begin
End;
Begin
End.
== Hello I am called PASCAL and I am here to teach you to - how to program, and also to teach you some programming disciplines in that you will not be able to mix types as "C" does
CODE:
#include
class I_am_an_esoteric_class{
public:
I_am_an_esoteric_class();
virtual ~I_am_an_esoteric_class();
virtual a_method()=0;
}; etc...etc...
ENDCODE
== Hey my spritual brother, I am a new borned from high-vibration space etheral language based on "C" and in this new-age world beginning, I come from a dream of a real magic and totally polymophic memory space called Object-Oriented Programing and esotherism. ( I know there were already other kind of same worlds before me...)
CODE:
import L1.L2.L3.L4.L5.L6.L7.L8.L9.L0;
class Main...blah BLAH{
I am a Linux newbie; C/C++ newbie since 7 years; I feel so much alone without my feu Amiga 500
Arrg! by mistake I submitted my unfinished text!!!
...
Here it is and the above blah blah was only to say and bring this point according to my believe:
okay, java code ends here...
and All other higher-level language are not PROGRAMING languages but certainly SCRIPTING LANGUAGES!!!
Btw, In what language those SCRIPTING language was built from ????? hmmm???
C/C++/or even assembly language!!!!
So you guys saying you are programmers when you put stuff like Ruby, Visual Basic, Java, Python, Perl, PHP, etc...etc... You're WRONG...You are SCRIPTERS not PROGRAMMERS....Unless you know and were used to program using those "arcane C/C++ languages- as you say
ouf!!! I feel better now...Sorry I am really pissedoff when I see people talking about programming when in fact they SCRIPT with really big business words!!!!!
Scripting is really necessary for quick and fast config and interfacing programs...And installing Linux or even M$-Window$.
hummm... I am a dead man I know....
I am a Linux newbie; C/C++ newbie since 7 years; I feel so much alone without my feu Amiga 500
> So you guys saying you are programmers when you ...
> put stuff like Ruby, Visual Basic, Java,
> Python, Perl, PHP, etc...etc... You're
> WRONG...You are SCRIPTERS not
> PROGRAMMERS....Unless you know and were used to
> program using those "arcane C/C++ languages- as
> you say
There is little difference. In fact, Ruby compilers are probably already written in Ruby. And I have written quite some code in C and Pascal.
And besides, if a little shell script does the same, a gigantic C program, why should I do it in C?
"constants should only be defined once per program"
Ri-i-ight. You're probably one of those people who put "const int ZERO = 0;" (or, worse, "#define ZERO 0") in a generic include file called "misc.h", right?
Hi, it was 02:34 AM in the morning and I was a bit upset and very tired from other duites. But What I've writte in, if a bit loudly, was my believe as I said.
:-) hahaha
Indeed I use scripting tools - all the ones I named in my crazy comments (...). PHP, bash, javaScript/java...
I did not want to say that scripting is bad, I was reacting very loudly and angry against people who says C/C++ should be dead.... Those people cannot be aware of that all higher-level of beautyfull and powerfull and idiot proof programming languages are in fact directly built from C/C++, or even assembly language... BTW are the assembly mnemonic langauges shall be killed ??? -- NO and NO for C/C++.
Scripting is a level of programming that it is NOT the same level of ASM, C/C++/PASCAL native machine-code compiled languages.
I name it "SCRIPTING" not "programming at the level of C/C++....
I was used to fireup Borland Turbo C/C++ (2.x/3.x) In the DOS world before linux and Winblows and residential internet time. I wrote a BBS terminal client to connect and use those BBS through telephone-line modem ( 2400bps and 14400 bbs ) and had to hardcore program interrupts and speak to the UART dev to break that stupid DOS console 9600 bps max in the bios.
In the linux slackware 3.4 time I wrote a big custom real-time monitoring software to monitor real-time transaction @work - in C/C++ and my own "scripting" language to configure and setup the transaction data directives at runtime...etc...etc...blah...blah
Other guys @work tried to use TCL/TK, JAVA, etc to achieve my goal without success and it was something really funny to see those scripting not doing 1% of what my project did... Thus, when really specialized stuff and speed is needed, NO scripted languages can be considered...
So there are Programmers, and Scripters
Long live to REAL C/C++ programmers!
cheers!
I am a Linux newbie; C/C++ newbie since 7 years; I feel so much alone without my feu Amiga 500
( warning: my low-english skills may be funny :-)
.NET extends itself within its own layer-level, it is consuming more resources and getting bigger and f%^& slow and buggy. This is very dangerous - but the Power-Corporations refuse to PAY REAL DEEP-SKILLED PROGRAMMERS to secure and optimize their business techs at the level of C/C++. if those deep-skilled people are very rare in the world, it is because of JAVA. Not to talk about Microsoft deadly cupid+capitalist brain-hidding technologies (sorry, I had to say this:-).
I am used to speak, write, and think in C and C++ since year 1994, the year I've got to go serious in programming...
For those who are borned after the arcane MS-DOS-only home computers:
The C++ language is a really tough language to learn and master ( templates features: I begun to use it only since last year! ) and the C language learning curve and master is very necessary before going to C++, in my opinion, contrary of people telling that C is not required to go C++ in term of syntax and lexxical mastering. In the history of C, it was told that C is an high-level assembly language and still it is more true today - indeed, because the algo-engines generate better assembly algorithms than human brain...
-As I told in an angry reply ( Ruby sub-topic ), All those high-level - high-end - idiot proof scripting languages are ALL built from something at lower-level engines - speaking of programming language - : C/C++/Pascasl or any compiled-into-native-machine-code-cpu-binary instruction sets!!!
Lets call it "Technology-level layers"...
Thus at least the famous or infamous JAVA technologies are built from C or C++ ( really I dunno but certainly not Assembly language...).
And so for the other scripting techs.
-High-end level of "technology-level layers" such as Java, Perl, Python C#.NET etc...
implements grouped lower-level layers instructions to form that high-end and complex business technology. Writing it in C/C++ or any other compiled language maybe hard and long and very skilled programmers requiered.
-Compiled languages should not be "cross-platform" because the results are the same as high-level languages: Slow and overhead calls of low-level instructions sets...
- In term of security, it is always the responsibilities of the programmers and their project-leaders- not - the technologies. No one can rely on pre-built packages for security from one generic context to a different specific, specialized-and-very-sensible context.
Really, the C/C++ language technology cannot be killed because it will always be requiered to perform extentions to the higher-level scripting -or pseudo-compiled languages. It is very stupid to think that C/C++ is no more needed as it is the base of most of the high-end layers.
As Java and
For the small business compagnies that cannot afford deep-skilled people, there is no real solutions other than those scripting technologies...which are really good in small contexts - really.
And no - I am far from beiing a deep-skilled programmer, but I see what I see and I am scared of what is coming in the future....
Long-live to C/C++
I am a Linux newbie; C/C++ newbie since 7 years; I feel so much alone without my feu Amiga 500
Java was born (and continues to develop) with the benefits of the "lessons learned" from its forefathers (C, C++, Tcl!). Assertions were deemed a good thing from the C++ crowd, and -- VOILA! -- now assertions are now a part of the Java language.
Don't fight evolution. Resistance is futile. Put the pointer down -- nice and easy like.
Mr. Java Zealot
"The mere imparting of information is not education." --CGW