Fog Creek Software
Discussion Board




Which language will supersede C/C++ ?

In the discussion of a previous topic "Micro Pros WordStar Printer disaster – really?" (URL: http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=21755&ixReplies=10 ), I noticed that Albert D. Kallal said:
>Perhaps there really is a legit reason here. As Far as
>I know, most of the WordStar product was written in
>Assembler (of course so was WordPerfect also). Of course
>Microsoft word was written in C, and programmers can
>add about 10 times the amount of features for the same
>amount of time compared to assembler. As a result, Ms
>word started to Eat WordPerfect’s bacon real bad. I am
>not sure when WordPerfect switched over from Assembler
>to C, but it sounds like they did the switch a bit too late.

That sounds interesting since I had a very long (but unfruitful) discussion with some friends yesterday about that specific point: C superseded Assembler in the 80's and made the gap between old and new software. It would be interesting to know what the new language of this decade is.
Is Java going to do the same to C/C++? Is there another C-killer waiting around the corner? Should I start moving my code to another language to avoid the WP syndrome or can I continue developing in C/C++ without any fear?

XRD
Sunday, December 08, 2002

C#. Maybe J#.

I'm a believer.
Sunday, December 08, 2002


I don't think any one language will supercede C++. In fact if you look at assembler it was actually superceded by several differant languages: Cobol, Fotran, Ada as well as C. If C++ is ever superceded it will also be conglomorate of languages which replace it.

I also believe that C++ is a vibrant, alive language. It has features such as templates whose usage and benefits are only starting to be identified. There is no mainstream language, that I know of,  that currently supports templates. (Although I believe they are in line for release in version 1.5)

The other major advantage that C/C++ has is the huge number of libraries and tools that currently exist. Although libraries for other languages exist and are growing they are yet to obtain the sheer scale as C/C++ does.

Finally, most open source tools are written in C/C++ and depend on the Gnu compiler for platform independence. This will not change in a hurry

As to the replacing languages will be , I think it will be Java and its clones like C#, plus a combination of Perl, Python and whatever VB eventually mutates into, as well as some other languages that do not exist yet... but not for a while.

JB
Sunday, December 08, 2002

This begs the question, why did they name it C#? Why not D? Or shouldn't C++ be called D, and C# be called E?

Or more importantly, how long with the world's governments allow us techies to continue the naming of new technology? Someone should stop us. C# should be the last straw.

marc
Sunday, December 08, 2002

When you put one ++ on top of another ++, it forms the octothorpe (#).

Naming C++ D has been discussed before since Cs precursor was B.

Since ++ is the increment operator in C itself, C++ seemed real clever -- whatever value C has, C++ is a little bit more. That makes sense.

Stacking ++ on top of ++ doesn't make sense. It implies that # has twice as many featuers stacked on top of ++ I suppose, but that is not true -- C# is a sort of castrated C++ grammatically. Maybe the sharp is suposed to suggest the sharp blade they used to castrate features.

X. J. Scott
Sunday, December 08, 2002

Because D is already a language, created and implemented by the guy that did the awesome Symantec and Zortech C++ compilers: http://www.digitalmars.com/d/index.html .

Troy King
Sunday, December 08, 2002

I think MS is effectively killing C/C++ currently with .NET and C# because they have neutered C++ by making it managed anyway.  Yes you can still do C++ with a different compiler etc, but in 5 years 90% of Windows dev will be with .NET.  I believe that will knock traditional C/C++ back to the position currently held by assembly.

Crusty Admin
Sunday, December 08, 2002

>I think MS is effectively killing C/C++ currently with .NET and C# because they have neutered C++ by making it managed anyway.

But you don't have to write managed code, you can still create traditional C++ programs with VS.Net.

I don't think C++ is really MS's target with .NET, it is really aimed at replacing Java and VB.

Tony E
Monday, December 09, 2002

Here is an interesting question (keep in mind I owe my livliehood to java), have done a little bit with Perl, and quite a bit with VB, but to be honest I don't see a real difference in the languages.

What I mean is, any Imperitive language is going to have certain strengths and weaknesses, and protect you from certain traps and expose you to others, and will have libraries/gui developement systems that are better for different things (i.e. VB events being a bit easier to grasp than java events) but still the difference is not huge.

Now, take two more factors into account 1) That any real world system will have to do more than one function (and chances are that at least a few of the functions are not ideal to develop in the chosen language) and 2)That choosing the language is very often done, not on the basis of what is ideal, but politicla/marketing reasons... and you get that, at "best", the next C++ will be decided by the Marketing departments of Sun,MS,HP...

But does it make a real difference? Assembler was replaced by procedural languages, because the productivity of programmers increased something like 1000% OOP Languages yielded smaller results,compared to procedural ones. Now what are the chances that an oop language will be replaced by another OOP, can we really say that a java/c#/perl programmer can crank out twice the code, no, especially when you take into account, low level system calls that have to be done in c/c++ anyway. So, no huge output boost, no replacement.

I think the future is in one of two areas 1) Frameworks or
2)Languages that are not popular today. By frameworks, I mean standards, and libraries that make current languages more productive Struts/STL are two examples I can think of. 2) Maybe someone will create a general purpose functional or aspect oriented language.

Daniel Shchyokin
Monday, December 09, 2002

I agree with the earlier posters that the switch from Assembler to procedural languages was a dramatic shift, and caused a cascade of changes throughout the computer industry. I’d also agree that while OOP and RAD tools like Delphi, VB, and PowerBuilder were the next step forward in terms of productivity, they were just that: a step and not a leap.

I’d suggest that we won’t see another leap of the same scale until some of the more SF ideas hit the street. I’d love to see self-organizing programming environments that employ pseudo intelligence to solve problems on their own. In other words, I’d like to see the developer equivalent of the concept Sony has described whereby all of the devices in your home cooperate in a self-organizing network. No big central computer, no master program, no complicated set-up process. Each device can independently inform the network of its existence and capabilities and participate in the operations of the home.

Why do I think this is the way forward? Each of the earlier innovations was successful because they ultimately made it easier to develop software. As it became easier to develop software, more people became involved in developing simple solutions to novel problems, and the brilliant folk were able to tackle more complicated tasks. We still need people that understand assembler today… but we don’t need them to create the software used by my wife to track her obscenely large collection of recipes, or by the local peewee hockey league to track parents and players.

Geoff in Vancouver BC
Monday, December 09, 2002

I think C/C++ will have a place in low level development for the forseeable future. They are the modern assemblers. It's quite likely there will be more refinements to C++, but unless there is a fundamental change in the nature of the language, there is no real need for a name change.

However, I think it is being largely replaced for higher-level development by VB/Java/C#/Perl/PHP/Delphi and an array of other languages.

I think the change we will see in the near future is a gradual movement downwards in what is considered low-level enough to require C/C++, and they will backed into an increasingly smaller niche that newer languages aren't considered possible/practable for.

James

James Shields
Monday, December 09, 2002

For low-level system development, nothing will supersede C/C++.

Which language will supersede C/C++ for application development?

C#.

Eric W. Sink
Monday, December 09, 2002

The answer is python.....or maybe ruby

fool for python
Monday, December 09, 2002

Visual Basic, of course.

Nat Ersoz
Monday, December 09, 2002

<< For low-level system development, nothing will supersede C/C++.>>

I don't think C/C++ will go away anytime soon either, but Verity Stob took a funny stab at it:

<<Microsoft is now treating Visual C++ about the same way that it used to treat MASM in 1990—as a sort of strong but unpleasant glue, suitable only for emergency use. It seems to me that we don't hear very much about MASM these days. If you want to smother something, first dub it "for systems programming.">>
[c.f. http://www.ddj.com/documents/s=7532/ddj0209o/0209o.htm ]

Nick Hebb
Monday, December 09, 2002

Speculations.

For neither C# nor Java add anything to the world of programming. Just marketing hype. Those languages are not interestring because they dont add anything new. No new concepts.

Passater
Monday, December 09, 2002

For me I meant.
Gosh, previewing _is_ sometimes useful.

Passater
Monday, December 09, 2002

They dont add anything new, but make some old stuff a little more convenient and accessable

Daniel Shchyokin
Monday, December 09, 2002

'I don't think C++ is really MS's target with .NET, it is really aimed at replacing Java and VB.'

Entirely correct; .NET is far too immature to replace C++, and something of a different conceptual thing to boot.

Jason McCullough
Monday, December 09, 2002

Nat,

Why do you say Visual Basic, I mean what makes you think VB is the way to go?

Thanks,

Prakash S
Monday, December 09, 2002

Language of love :)

wise dude
Monday, December 09, 2002

C++ isn't going anywhere for a long time.  In fact, I'd wager that much "C++" code being written/maintained right now is really just old-style non-OOP C code in disguise.

That said, the "sucessor" to C++ will obviously be either C# or Java.  There are no other general purpose languages in the running (VB excepted) at this time.  Between the two, I'd give the technical edge to C#.

It will be interesting to see if C# catches on outside of Windows platforms.  IMO, it's better than Java, but not by enough of a margin to unseat Java where already entrenched.  If the open source MONO stuff takes off (big IF), watch out.

The real question is what's after C#/Java.

Bill Carlson
Tuesday, December 10, 2002

C/C++ is the super Leatherman of programming languages. It is going to be around for a long time.  The world is electro-mechanics, and as long as there is a switch to flip or a motor to control there will be C/C++, you can't do that with java without a native interface. And if you want real time applications, again C/C++ are hard to beat when it comes to speed. Nvidia just came out with Cg, C for the GPU. And there is work in progress on AspectC++ and AspectC. Both are prepreprocessor language additions for programming with aspects, AOP. New language features will probable continue be added to satisfiy programmers needs without causing them to have translate tons of legacy code to a new language. If want to see how powerful the C++ can be, take a look at "Modern C++ Design, Generic Programming and Design Patterns Applied" by Andrei Alexandrescu.

Some people will argue that java will be able to do real time with a faster machine. Yes as long as the application is small. As java apps get big their garbage collection get much slower, which will impact a real time application. Java is a good networking language. It will probably soak up alot of that domain, but its hype will eventual die down and people will use it where it best makes sense.

I would have to say Java and C/C++ continue to be used for the next couple of decades.

David Hickerson
Tuesday, December 10, 2002

XRD,

I am not sure what you mean by supersede. Do you mean replace?

Currently, the most popular programming languages for business application development are classic Visual Basic on the PC and COBOL on the mainframe.

I doubt that COBOL will be replaced with something better. While the use of classic VB is far from dead it won't be supported by Microsoft in a couple of years.  So, for many developers this language/development platform is dead.

C++ is a non-proprietary programming language.  It won't be going away anytime soon.  Microsoft won't be phasing out their version of C++ either. Just about all of their internal code is written in this programming language!

While C++ isn't going away, I believe its popularity in the business community will decline.  Java, C#, and VB.NET seem destined to become (or stay) the dominant programming languages on the PC.

Java never really had a lot of success penetrating the desktop market, however, it is currently very popular on the server (especially in the corporate enterprise market).  Unless something comes along to replace Mircrosoft Windows -- C# and VB.NET will definately dominate on the desktop.  Currently, the question a lot of people are asking themselves is -- How much of the corporate enterprise market can .NET (C# and VB.NET) take away from Java?

one programmer's opinion
Tuesday, December 10, 2002

"one programmer's opinion",

Yes, I meant "supersede=replace".

I see that most people are speaking about VB, C#, and Java as possible candidates to replace C/C++. Well, I am developing commercial software for the masses and most of my code is written in C. I guess that major software in that world is still written in that language (or using some class/inheritance fashion in C++.) C and C++ are now considered are low level languages to do things at the system level. People do not use Assembler anymore (I remember those old days when my DOS software was a mixture of Assembler and Pascal :-)  ) . C compilers are now good enough to produce good machine code so why bother writing it by hand?
My question could be rephrased: "is there a new low level language that will replace C/C++". In my humble opinion, Java, VB, and C# cannot be considered low level.

XRD
Tuesday, December 10, 2002

Java and C# are the systems languages of their respective machines.  (Assuming .net defines its own machine like Java does.)  The amount these machines supercede Unix/Windows determines how much Java/C# will supercede c/c++.

So you're really asking what kinds of machines will be dominant in the future.

Tj
Tuesday, December 10, 2002

Just so no one misunderstands...  I was being sarcastic.

Nat Ersoz
Tuesday, December 10, 2002

I doubt that microsoft will phase out any of the current .NET supported languages. In fact I see them adding support for more. Their .NET paradigm is to capture as many developer as possible to support their OS as possible, so as to dominate the market. This is the same as with COM, but a better, fuller, and easier implementation. Their point behind .NET was to enable C coders to produce functionallity, that a VB coder or any coder could use, a unifying API. They want to create such a rich environment from millions of developer adding to it, and wanting to because of its richness. Platforms succeed on the applications, that are available for it. Cost performance is the other big factor. Until the market is complete or nearly theirs, microsoft I doubt will be the ones eliminating languages.

David Hickerson
Tuesday, December 10, 2002

I wouldn't hold my breath.

Nat Ersoz
Tuesday, December 10, 2002

"I see that most people are speaking about VB, C#, and Java as possible candidates to replace C/C++. "

Well, yes and no.  C++ is somewhat different from other programming languages in a person can write a procedural C program just as easily as they can write an object-oriented program using C++.  A better example might be, a person can write a device driver or a multi-tiered business application using C++.  Try doing that with the above mentioned languages.

As I mentioned in a previous post, I do feel that C++ importance in the business world (you can interpret this to mean non-shrinkwrap custom built software) will diminish.  C++ will still be used in many other areas of software for many years to come.

"My question could be rephrased: "is there a new low level language that will replace C/C++". In my humble opinion, Java, VB, and C# cannot be considered low level."

Short answer is no.

one programmer's opinion
Tuesday, December 10, 2002

Functional Programming Languages.

Haskell r0x0rz

Or maybe not.

Ben Brandwood
Wednesday, December 11, 2002

*  Recent Topics

*  Fog Creek Home