Stan Lippman On Version 2 Of Managed C++
Lansdowne writes "Stan Lippman, one of the founding fathers of C++ and currently a language architect at Microsoft, has prepared an exhaustive translation guide, comparing old Managed C++ to the revised CLI/.NET version of C++. According to Lippman, "There are a number of significant weaknesses in the original language design (Version 1), which we feel are corrected in the revised language design (Version 2).""
better colors
Someone remarked the other day, possibly on this very board, along the lines of "the C++ standardisation committee is now full of template-loving metaprogramming fans" who are more concerned with fixing their pet superlibraries than they are with fixing the more glaring flaws in C++ as a modern programming language. I'm sure anyone who follows developments around the language, particularly the serious Usenet groups, will see at least an element of truth in that claim.
This is almost worse, though. We now have at least two of the biggest names in C++ -- Stan Lippman and Herb Sutter -- following the Microsoft banner. At first, I figured that would be good for the language, driving up standards compliance in one of the most popular implementations, Visual C++. Now I begin to suspect that it's just another Embrace And Extend(TM) manoeuvre.
The first round of "Managed C++" needed horrible syntax kludges, because C++ is simply too flexible a language to become another .Net language clone like C# or VB.Net. At least it was fairly standard-compliant before, though. Now, if you thought VC++ 6's for loop scoping bug was annoying (and having fixed numerous bits of code broken in that way that failed on other compilers, I promise you it can be very annoying) that's going to be nothing: at Microsoft, they care about standards compliance, but not so much that they won't add random extra keywords to the language! I fail to see how this will be any better than back when Borland used to add properties and such, and then anybody wanting to move away from their component libraries was screwed.
C++ sucks if you want to use .Net anyway; if that's the sort of programming environment you want, why not just use C# and be done with it? For all Microsoft's banter about interoperability, no-one who's got 100,000 lines of MFC code and a workforce trained to maintain it is really going to change to .Net overnight. Technologies like that are for new projects, started from scratch and able to match the architecture from the ground up, not for random porting exercises of existing code.
Ultimately, managed C++ is just another lock-in technique, but it's sad that it's apparently being supported so enthusiastically by people who used to know better.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Managed C++ has less features than ISO C++, namely templates and multiple inheritance.
You cannot mix code from the two in many ways, like having a class from one inherit from another.
Sizeof of managed classes is impossible. Managed classes cannot use const or volaitle.
Managed objects cannot be passed by value; only references or value types. (ISO C++ objects are structs that can always be passed by value)
Operator delete doesn't work if no user-defined destructor exists in a managed object.
Managed classes cannot override operator& or operator new.
A managed object cannot be used as a member in a union.
Managed c++ does not use unions; instead a complicated field offset system.
Pointers to objects cannot always be casted in managed C++, pointers of the same size can always be casted in ISO C++.
Data in managed C++ is zero-initialized. Data in ISO C++ has arbitrary values unless explicitly initialized.
Managed C++ adds certain members to all classes (as derived from Object), like GetType; all classes derive from System::Object. ISO C++ classes can have no parent class.
Static sized arrays are illegal in .net
C-style multiple parameters are not supported; use param array instead
Normal c++ supports static-only typing. Managed c++ requires dynamic typing, at least to some extent.
Pointers to members are not supported in any way in managed c++; delegates replace them.
Normal C++ makes absolutely no library requirements on outputted code; not even the startup library is necessary. Managed c++ requries the entire .net runtime, and requries you to include mscorlib.
Classes cannot be defined inside of functions in managed C++.
Any class can be derived from in normal C++. Sealed classes cannot be derived from in managed C++.
Conversion functions are always static in managed c++. The naming convention is different.
RTTI is not supported in managed c++.
Only public inheritance is supported in managed c++.
Normal c++ explicitly has no garbage collector as part of the language; if you want one, use a library. Managed c++ requires you to use .net's GC.
The layout of members in a class or struct in normal c++ can always be known at runtime. Managed makes them permanently opaque.
Removing anything from C++, espescially something as important as templates or multiple inheritance, makes managed C++ a distinctly different language. And this is just a list of some of the things that normal c++ has that managed doesn't. The list of extensions is much longer.
Look at the .NET versions of Visual Studio, and see how the C++ has been rammed right to the bottom in terms of features, while visual basic and C# (ACK) have all the actual useful stuff. (Forms designer, for one).
I mean, I love writing C++ and having to remember a million different __gc __huhwhut __whynotthistoo in front of all the declarations. Completely *unportable* code.
Microsoft is attempting to end the usefulness of C++ on Windows, and I think with VS2003 they did it.