September 2013

1 234567

Custom Text

Most Popular Tags


May. 10th, 2009 11:15 pm
[personal profile] gchpaco
Almost everyone likely to be reading this is going to be totally uninterested. However due to some rash statements I made in my youth that can be found on Usenet if you are sufficiently determined, and the impending threat of the C++0x standard, I thought I might reaffirm my position on the language.

Briefly, it is the most terrible programming language anyone has seriously advocated programming in for the last 20 years.

In around 1995, when I first started programming in C++, it was a comprehensible language, in the sense that one could understand the entire language fairly readily. It had some lame parts to it, and there was some obvious omissions, but was on the whole probably slightly better than hacking an object system onto C manually. In retrospect, Objective C was probably superior, but it wasn't very well known outside of the NeXT world.

Then the ANSI committee got a hold of it. They fixed some of the omissions, for example adding templates, but in most cases the fixes were worse than the disease. In the worst cases, for example with template metaprogramming, the "fixes" were totally incomprehensible even for the most reasonable code. I am ashamed to admit that it took me a number of years to figure this out, and to develop proficiency with other languages to broaden my horizons. If you are curious, Yossi Kreinin has been maintaining a "frequently questioned answers" list, and most of his criticisms are trenchant.

And now the committee is back. C++0x has managed to make a terrible language even worse. It doesn't fix any of the preexisting problems, like the near impossibility of parsing the language successfully or the rampant abuse of implicit calls and template metaprogramming, and adds some even more creatively lame parts like making the management of the variable closure in anonymous functions the programmer's responsibility, having four string types, adding a brand new type qualifier, etc. Not content with being the most difficult language in the world to parse, it is now the only allegedly serious language in the world that requires a symbol table to tokenize.

C++ is nominally for "bare metal" programming (it is certainly inadequate for anything else), but even for that, implicit copies, implicit conversions and the general lameness of the language fight you every step of the way. The language, the language standard, and everything about it and the community is consumed with a focus on the irrelevant at the expense of the larger picture.

Sadly we do not appear to have any competent bare metal languages any more, save C (which has hardly changed at all, and is still lame, but lame in a tolerable way, in a way people can work around). I am honestly considering Ada, which for all its faults has a comprehensible computational model. Perhaps D will save us, but I doubt it; I expect to be programming in C at some point for most of my professional life. Which depresses me, but oh well.

Paradigm changes usually require a new language to describe it, i.e. program effectively in it. C has gone through at least two. The first was successful only because of the original simplicity of the language. The second was "successful" only because of the established infrastructure, i.e. too many programmers didn't want to completely change.

So you're right.

I haven't looked at the standard as I've not been actively coding in a few years. It took me a long, long time to get out the structured to object oriented mind set. I'm still not that good at it when code pieces inherit more than once.

I'd like to see an IDE that would automatically expand the object when you need it, i.e. show you all an object's properties and methods, & expand methods when you click on them or something. BUt this is too much to hope for.


(no subject)

Date: 2009-05-13 06:12 am (UTC)
From: [identity profile]
Nominally, I agree. C++ has outgrown its own syntax, and ended up with an almost impossible parse tree.

Most of my programming now is done in python, but I'm having to learn BASIC all over again for job requirements -- work uses Microsoft VC++ and/or Delphi for our primary programming environment, and they are sticking with as the scripting language of choice; lots of fun when you're talking to a network of modules attached to a USB device.

Expand Cut Tags

No cut tags

Style Credit