Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Stan Lippman On Version 2 Of Managed C++ 40

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).""
This discussion has been archived. No new comments can be posted.

Stan Lippman On Version 2 Of Managed C++

Comments Filter:
  • better colors (Score:2, Insightful)

    by Anonymous Coward
    better colors [slashdot.org]
  • I hope the Mono project will support this?

    I believe that this is a real standard, whereas VB.NET (which Mono supports) is not a standard at all.

    • I think Mono doesn't even support the current Managed C++ version... only C# and VB.NET. There's mcs, the Mono C# compiler, and mbas, the Mono VB.NET compiler, but there's no Managed C++ compiler, and I think mcs can't compile C++ code...
  • I'm in the middle of a project using a rather large amount of Managed C++ glue to bridge a native C++ library with .NET. Obviously I can't wait until VS2005 is out to use the new syntax, but I'm going to have to redo a lot of it in the future.

    I'm not complaining about the new syntax, though - what I've read about it seems like it's much cleaner and better thought out than the current stuff. I just wish it was here now so I could use it instead of having to rewrite it down the road.
    • I'm not so sure anymore, it all looks like a bit of a bodge based on their experiences with V1.

      I mean, things like this:

      In effect, under the revised language design, destructors are once again paired with constructors as an automated acquisition/release mechanism tied to a local object's lifetime. This is a significant and quite astonishing accomplishment and the language designers should be roundly applauded for this.

      If it was so goddamn simple, why didn't they do it in the first fskuing place. Even I
  • I don't understand (Score:4, Interesting)

    by QuantumG ( 50515 ) <qg@biodome.org> on Monday August 23, 2004 @07:27PM (#10051704) Homepage Journal
    Why can't they just change their compiler to generate managed code? Why do they need to change the syntax of C++ at all? In the open source project I work on we use the Boehm garbage collector for C++. So the number one reason to use managed code, automatic memory management, is already available to us. It would be nice if we could just recompile with some settings under VC++ and get a managed version to compare against Boehm. Of course, we'll need to be able to mix safe and unsafe code as our project is a little heavy on the bit manipulation side [sourceforge.net].
    • It's all about Microsoft lock-in. Don't kid yourself otherwise.

    • by Anonymous Coward
      Why can't they just change their compiler to generate managed code? Why do they need to change the syntax of C++ at all? In the open source project I work on we use the Boehm garbage collector for C++. So the number one reason to use managed code, automatic memory management, is already available to us. .Net is not just about garbage collection. There are many other facets to consider, like properties, value objects, etc. And let's not forget that these enhancements allow you to use either GC or non-GC,
      • umm.. that's all shit you don't have in the C++ language.. so I guess we could say these are .NET extensions to C++, but can you just recompile C++ to .NET?
        • It seems, from what everyone is saying, the answer is no.

          Leave it up to Microsoft who never saw a technology they couldn't "improve" by bloating it beyond all reason.

          Everything MS comes out with is only easier when you use it exactly the way they do. Anytime you want to branch off into something new, you're suddenly faced with practically reverse engineering it to figure out what the heck is going on.

          I've never understodd the need to keep cramming new more and more levels of stuff between the code and w
    • by Dr. Sp0ng ( 24354 ) <{moc.liamg} {ta} {gnopsm}> on Monday August 23, 2004 @10:19PM (#10052815) Homepage
      Why can't they just change their compiler to generate managed code? Why do they need to change the syntax of C++ at all?

      Because running a program under the CLR is quite a bit different than running under a native CPU, and stock C++ doesn't really lend itself to the environment (for example, the CLR does not provide deterministic destructors). Rather than try to shoehorn C++ into a place it doesn't really fit, Microsoft did the right thing and extended the language in a way that makes it fit in with the other .NET languages.

      Plus, without new keywords, how would you specify which classes are garbage collected and which are manually managed? How would you specify class attributes? What about boxing/unboxing? The CLR is a very powerful environment, and I'd rather C++ have the ability to use this power.
    • by Foolhardy ( 664051 ) <csmith32@gmai l . com> on Tuesday August 24, 2004 @12:53AM (#10053508)
      Maybe because "Managed C++" [tpg.com.au] and "ISO C++" are two entirely different languages? Sure, they may have some syntax in common, but they have almost nothing in terms of purpose, design philosiphy or capibilities in common.

      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.

      • Maybe because "Managed C++" and "ISO C++" are two entirely different languages? Sure, they may have some syntax in common, but they have almost nothing in terms of purpose, design philosiphy or capibilities in common.

        Yeah, but this story was about the C++/CLI language which (unlike "Managed C++"!) is supposed to be compatible with C++ -- until you use one of the .NET-specific extensions, something which will happen pretty soon, I'm afraid.

        One person's positive view here [brinkster.com].

        I still don't like this at all. P

      • by Anonymous Coward
        managed C++ is so different to C++ that it's a different language.

        what MS have done is invent 2 new languages, managed C++ and C#. one of them is ok, the other is an abomination.
        They didn't need to invent managed C++, all the interopability could have been provided by some library helper classes and COM. I've never heard of an explanation for manC++, and never heard of a new project using it. to link up with existing C++ codebase it's used, but should have been done as a library, not a new language.

        Stan L
  • by Anonymous Brave Guy ( 457657 ) on Monday August 23, 2004 @08:26PM (#10052127)

    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.

    • Unfortunately the C++ standards commitee has always been a corrupt bunch of language lawyers. You just have to look at all the money that Plum Hall make selling updates to their test suite and then trace back who on the commitee actually proposed and championed the changes to the standard in the first place to see that.
      • I'd assume any professionnal in the ISO commitee updates its products based on the standard. And then, sell them. So what ?
        • Heh, see Plum Hall sell the test suites that everyone has to buy if they want to claim that their compiler is standards compilant. So by forcing changes to the standard Plum Hall make a heap of cash from people buying their updates. The more changes, the more cash. Of course, all those changes to C++ are necessary and there are SO many standard C++ compilers.
      • That's very offensive - I know a couple of people on the committee, and they are hardworking people that largely volunteer their time and efforts for the benefit of the C++ community. Corrupt? I doubt it, but of course it's easy to make unfounded allegations on slashdot.

        BTW, has it occured to you that the implementor of a library test suite might just have extremely good understanding of the library and its flaws, and hence recommends more changes to it than committee members who focus on other parts of
        • Heard of backwards compatibility? The C++ standardization commitee certainly hasn't. There is a big long set of rules which have been codified to decide when something should be standardized. One of those rules is that the changes should be in common use (that is, a lot of compilers should have similar features) before they are standardized. Every single time there is a suggestion to add a new feature to C++ this rule is brought up and then subsequently disregarded because if they only added features th
    • "C++ sucks if you want to use .Net anyway;"

      It does seem strange. I don't think I would voluntarily use managed C++, only native C++ wrapped in C# (or even VB.NET!). The sheer annoyance of using a language that looks superficially familiar but is fundamentally different (all RAII code would break, IIUC etc.) would make it easier to learn a separate language for .NET-CLI work (like Java for JVM work).

      But I like reading and writing as portable code as possible. I find reading code that uses eg. GCC extens [redhat.com]
    • 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)

      #define for if(false);else for
    • Here's the question you have to ask vis-a-vis Microsoft's extensions of the language and libraries:

      What does Microsoft use to write its OS and applications? From everything I've heard it's all C and Win32. Now if they don't use, why should we?

      My experience with all these new technologies is that you are trading one set of headaches for another. You can either write the piece of functionality yourself, or you can beat yourself senseless trying to figure out how to use Microsoft's tools that supposedly p
    • 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.

      Yes. The top priority of the C++ st

  • by Anonymous Coward
    C++:
    namespace Foo {
    }
    Microsoft Managed C++:
    public ref class Foo abstract sealed {
    }
    Far be it from me to dare to consider accusing them of pointless, nay indeed redundant or tautologous, verbosity, but I do think they're using too many words.
  • by Anonymous Coward on Tuesday August 24, 2004 @05:42AM (#10054345)
    It wasn't enough that they had to extinguish Java out, now they've done the same thing to C++.

    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.

Do you suffer painful hallucination? -- Don Juan, cited by Carlos Casteneda

Working...