Thursday, November 15, 2012

A public letter to Microsoft about the CTP.

Dear Microsoft,

I see that you have decided to release C++11 in the form of a CTP. Congratulations on catching up! For a long time, it seemed like you just didn't give a shit, but thankfully that's not true.

I see you now offer variadic templates. Great! You know when GCC 4.3 came out offering back in 2008, and Clang 2.9 the April of last year, it was really amazing, so I'm glad to see you're offering this too now. It's really something that developers chained faithful to MSVC will finally be compiling code written with GCC years ago!

Initializer lists, too!? Wow! How nostalgic. Like when GCC 4.4 came out in '09. Oh, but you can't use it for std::vector? How silly. Well, I'm sure it's just one of those things you'll get around to in the same way you finally got around to C++11. There are probably some major complexities that I am not aware of for integrating this feature into the standard library.

You also now offer delegated constructors. It took GCC a long time to implement that! It only happened earlier this year. Clang didn't even have it until December 2011. Being only a year behind must feel like a major accomplishment. The whole team who implemented this should be promoted for their unusual efficiency.

My, my, default template argument for functions was a huge oversight for the standardizing committee. It's a good thing they corrected themselves, allowing GCC to include it in their 4.3 release series. It's good to see you have also corrected yourselves by including it in your CTP. Developers of MSVC will finally be able to write

    template< class X, class Y = type-exp >
    Y f( X x ) {return Y(...); }

instead of what we used to have to write:

    template< class X >
    type-exp(...) f( X x ) { return type-exp(...); }

Remember how it took GCC until 4.5 (April 2010) to get explicit conversion operators in, and Clang until 3.0 in December 2011? Well now MSVC developers too can take advantage of the fact that allowing smart pointers to explicitly convert to bools won't allow them to then convert to ints!

    std::unique_ptr<int> p( new int(6); );
    if( p ) { } // Explicit conversion!
    p + p; // Not allowed!

Have I forgotten a feature to applaud you for? Oh yes, raw string literals! Good job. Not the first here, either, but hey, it's not like you're competing for market share, right? After all, you already got it. Developers are locked in, aren't they? They have do use MSVC to develop professionally for Windows, right? Isn't that the idea?

Now, it would be absolutely horrible if you released all these features that the rest of the C++ community has been using for years and none of your customers knew any of it. So how wonderful it is that you have channel 9 where you have been publishing videos like Scott Meyer's influential Universal References talk and Herb Sutter's (who works for you) talk on the future of our langauge and Lavavej's core C++ course. Your parade of C++ intellectuals surely adds much to the discussion. I wonder: did they use your CTP to research those talks, GCC, or Clang?

So thank you, Microsoft. Thanks for holding the C++ community back several years. Thanks for offering educational content on these features, now that you finally decided to implement them. Thanks for parading all the C++ intellectuals in our faces to get us excited about these features, now that you offer them. Thank you for showing that you really care about advancements in C++, in your products. Thank you for demonstrating that you care about the advancement of the C++ community at-large, when they're using MSVC. Thank you for dishing out pieces of C++11 like chocolate rations. And thank you for hiring Herb Sutter back in 2002, which obviously made you hurry much faster in releasing C++11 features.

Thank you for being you. Without you, we'd all be programming in C++11! That would be insanity.

14 comments:

  1. You forgot Variadic template.

    ReplyDelete
    Replies
    1. Sorry my bad, you mentioned VarTemplates at the beginning. I just got blinded by passive aggressive tone of your rant.

      Delete
  2. What about developers stuck in platforms other than Windows where gcc and clang are not an option?

    Have you checked their level of support?

    ReplyDelete
    Replies
    1. If it ain't FreeBSD, Linux, Mac, or Windows, I'm entirely ignorant of what compiler you'd use in the first place. Though, being that one can write a backend for GCC for whatever platform you'd like, and maybe the same is true of Clang as well, I don't see how this would be an issue.

      I did find this, but it seems out of date. http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport

      Though, the availability of C++11 support on obscure platforms feels off-point. Developers using MSVC, for instance, are not developing for such obscure platforms, they are locked in to coding for Windows. Or, because they choose to develop for Windows, they are locked into MSVC. (Seems to work both ways.) The only comparisons I think are relevant are that of MSVC verses other compilers that run on Windows. Those are what developers could use if they weren't chained down.

      Delete
    2. In many Fortune 500 projects it is the customer that says what goes as development tools not the developers.

      Commercial UNIX platforms (Aix, HP-UX, Solaris, ...), mainframes systems like AS/400 and embedded platforms tend to use the vendor compilers in most projects I took part of.

      The amount of money those consulting projects bring, make them by no means obscure platforms.

      Delete
    3. But it DOES make it irrelevant to this conversation because if you were working on one of those platforms, then MSVC being a little behind wouldn't matter.

      Delete
  3. yawn.. yet another self-entitled ass. Look buddy, MS is under no obligation to provide anything to anyone. If you don't like it, don't use MSVC. Nobody is holding back anyone anywhere. You are free to implement a reference C++ compiler for Windows if you have the required talent.

    Visual C++ is a product that is supposed to bring Microsoft some.. *gasp*.. money. Its not a project with a goal to implement C++ in a way that *you* want, and nor should it be that way. As long as someone is willing to pay for it, it has fulfilled its purpose.

    ReplyDelete
  4. Does GCC supports std::regex ?? It was in the TR1, you know that thing supported by MSVC 2008, yes four years ago.

    ReplyDelete
    Replies
    1. You raise a good point. GCC shows no gains on that front.

      Delete
  5. You consistently use the word coarse when you clearly mean course. Although the mixup has a certain comedic value, I feel it is undermining your posts. Particularly this one.

    ReplyDelete
  6. I`m programmer on Mac OS X where all those excellent GCC and Clang are the system compilers. And to be able to support OSX 10.5 I should use GCC 4.2 as nothing newer is not supported. Compare this to the VS2012 support for WinXP and don`t throw a shit on a wall.

    ReplyDelete
    Replies
    1. I considered bashing Apple for GCC 4.2, but they're actively trying to switch over to Clang, so it's not like Apple users don't have access to C++11. They're assholes for holding their community back over exceedingly silly licensing issues, but they're also doing--as hard as this is for me to admit--the right thing by endorsing Clang and actively contributing to it. The only thing I can complain about is that I've read Clang's C++11 support on OS X is uneven to its support on Linux, but I don't know all the reasons why.

      Delete
    2. Although it occurs to me that maybe on OSX 10.5, Clang isn't an option. In that case, fuck them, too, but why does that mean I should not post my opinion about MS on my own blog?

      Delete
  7. It will take a while for C++11 to be fully supported on all compilers. Personally, I'm very keen to see VC++ support constexpr. Given that there's supposed to be another standard update in 2014 now, I wonder if that is focusing minds at Microsoft and is part of reason for the push to do more frequent updates!

    ReplyDelete

Please feel free to post any comments, concerns, questions, thoughts and ideas. I am perhaps more interested in what you have to say than you are in what I do.