Back in the day, Dr. Dobb's Journal ran a humorous column written by a programmer in the United Kingdom under the pseudonym Verity Stob. In this installment from 2002, Verity took aim at critics of Microsoft's .NET and its treatment of C++.
"Everybody hates us, we don't care"
-Motto of Millwall United FC fans.
Some top C++ people are cross. Microsoft (yes, yes, you do remember, that Microsoft) has dared to add some proprietary extensions to Visual C++ to make it work with the Windows .NET system. At a recent UK C++ conference, Bjarne Stroustrup himself publicly nailed, as it were, the 14 new keywords to the door of Microsoft's church. In an open debate, he and other luminaries aggressively questioned unlikely Softees Stan Lippman and Herb Sutter. These illustrious gentlemen put up a steadfast, if embarrassed, defence of their employer, but I can't help but wonder if everybody was missing the point.
For one thing: What else could MS do? Even if the High Council of C++ Syntax were sympathetic to MS's proposals, one can see that the standardisation route wouldn't seem attractive to those impatient little monkeys at Redmond. It was but a fleet decade or so before the C++ elite put a string class in their beautiful-if-baffling library. At the next round of standardisation, perhaps complete by the time time_t wraps negative, they might condescend to include--gasp!--a function to deliver an uppercased string. Change at this pace is not much use if you want to get a fix into the next version of Windows.
And I do wonder if Dr. S & Co. have raised their eyes from the Standard for a moment to notice what Microsoft is actually up to. Far from annexing C++, which is what the C++ folks say they fear, Microsoft has taken away its first class citizenship of the Visual Studio package (for example, where are the wizards to connect C++ code into the new .NET forms? They are available for C#, VB, and, for heaven's sake, even the J thing). 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."
Now a leap from C++ to, cough, a rather distant part of this biz we call "prog." Many years ago, I wrote a column in A. N. Other magazine that listed my least favorite Visual Basic features: the compiler directive that changes the first index of arrays from 0 to 1, the 16-bit integer type in a 32-bit language implementation, a frankly bizarre use of a static keyword (betcha can't guess what a static procedure is). When I recently stumbled upon a similar but much more extensive list--try http://www.mvps.org/vb/index2.html?rants/vfred.htm--I first assumed somebody else was playing the same game.
Exactly wrong. This is a protest site, started by one Karl Peterson during an early .NET beta. It objects to Microsoft's vile and underhanded attempt to remove subtle traps from VB.NET, to clean up baffling and ambiguous syntax, and to erase pointless inconsistencies. What do we want? Parameter-passing defaulting to call-by-reference! How long do we want it? Forever!
All right, I'm being unfair. Mr. Peterson and his fellow VBers, of course, have shed-loads of old code that won't work with the VB.NET compiler, and they are quite reasonably skeptical of the porting tool that Microsoft has supplied to update source automatically. But they have overreacted. It is surely better to have one's language of choice brought up to date than abandoned in a pre- .NET ghetto.
If the appearance of .NET has confused the C++ people and driven some VBers to contemplate flight to Delphi, it has produced a rather different effect on the Javans-a kind of incandescent indifference. Here is James Gosling, no less, exhibiting this oxymoronic emotion in The Register: "[C#/.NET] would have been much more interesting if they [Microsoft] had done something creative. But it was so derivative" (http://www.theregister.co.uk/content/4/24582.html).
The biggest bone that the Java people have to pick with C# is not that the columnist Robert Cringely thinks it will run faster than Java, nor that it comes from Microsoft, nor even that it is a Java knock off. The real problem, about which very little is said, is that C# is a fixed-up knock off of the Java language: better scalars, proper properties, sensible facilities for event handling, a thought-out syntax for method overrides. Javans have been confronted by their own mortality. Could it be that the so-called language of the Internet is actually merely the voguish language of the .COMs?
Look. I hate the Beast as much as anybody. Honestly, you can check. But this off-target mithering and moaning is pretty feeble. There must be some worthwhile things to complain about. (I'm not sure what. My best effort is that, for all the boasting of language neutrality, any .NET language implementer appears to discover that he must produce another version of C#, albeit with different keywords. In a sense, this is the underlying cause of the C++ and VB woes; for a much more dramatic example, read Mark Hammond's white paper on an attempt to make a Python.NET; http://starship.python.net/crew/mhammond/dotnet/PythonForDotNetPaper.doc.)
However, in the absence of some well-founded objections, the terrible murmur that I keep hearing, the one with apocalyptic consequences for the thinking programmers of the world, will come to be accepted as Gospel. You know, the one that says that, in .NET, Microsoft has made a pretty good implementation of a rather elegant design...