C++ Renaissance at Microsoft

At the beginning of this year, Microsoft announced a “C++ renaissance”. Quoting from the description of a Channel 9 video with Craig Symonds and Mohsen Agsen:

C++ is currently undergoing a renaissance. This means that, by definition, the language, compilers and compositional tooling are evolving and coalescing into a state that maximizes native developer efficiency, productivity, and creativity across hardware and software domains.

Everybody agrees that Microsoft made C++ a sort of second class citizen in the past years, while the company invested a lot in the .NET framework. Many developers have switched from native development to managed (.NET) simply because it offers a more productive environment. And the postponing of the ISO standard committee in releasing the new C++0x standard only made things worse.

However, with the completion of the new C++ standard this year, Microsoft, apparently, plans to change that, and make C++ again appealing to developers. They already made C++0x features available in the VS2010 C++ compiler and are working on implementing most of the rest for Visual Studio vNext. They are also investing in tools (now labeled Application Lifecycle Management), and for instance are bringing intellisence to C++/CLI. One of the most important areas of development is parallelism, where they are developing the PPL and Agents libraries and now the C++ AMP that they just announced. And also recently the Kinect for Windows SDK beta that provides Kinect capabilities to developers who build applications with C++ (and other laguanges). And in the mean time they hired Erich Gamma in the Visual Studio team.

But this is not enough in my opinion. Improvements in language and tools are an important part, but not everything. It is equally necessary for Microsoft to evangelize it, using any necessary means. Unless they can spread the word, the work might pass unnoticed. To be honest, I was very reluctant about this part, half an year ago, when they announced the “renaissance”. However, looking back at what they done I’d say they are on the right track. Of course, there is still a lot of work to match the “advertising” effort put into .NET. But right now C++ is getting more attention at conferences such as PDC or TechEd, or their publishing assets, such as Channel 9, MSDN or their team blogs. So I tried to assemble a collection of videos, blogs, books and code samples related to C++ or native development that they published since the announcement of the renaissance. So far it looks good, in my opinion.

Channel 9
E2E: Herb Sutter and Erik Meijer – Perspectives on C++
Craig Symonds and Mohsen Agsen: C++ Renaissance
Windows 7 Taskbar Integration for MFC Applications
Tony Goodhew: VC++ Developer Communication – Questions and Answers
Talkin’ C++ with Kate Gregory
MVP Summit 2011: Meet C++ MVPs Angel, PJ, Tom and Sheng
Talkin’ C++ with Alon, Marius, Bruno, and Jim
Talkin’ C++ with Boris Jabes: C++ Intellisense, Game Development, and Boris Faces His Demons
Application Restart and Recovery on Windows 7 in Native Code
Parallel Programming for C++ Developers: Tasks and Continuations, Part 1 of 2
Parallel Programming for C++ Developers: Tasks and Continuations, Part 2 of 2
Conversation with Herb Sutter: Perspectives on Modern C++(0x/11)
First Look: New ALM Tools for VC++ Developers
Modern Native C++ Development for Maximum Productivity
Mohsen Agsen – C++ Today and Tomorrow
Herb Sutter: C++ Questions and Answers
Herb Sutter – Heterogeneous Computing and C++ AMP
Daniel Moth: Blazing-fast code using GPUs and more, with C++ AMP
C9 Lectures: Stephan T Lavavej – Advanced STL, 1 of n
C9 Lectures: Stephan T Lavavej – Advanced STL, 2 of n
C9 Lectures: Stephan T Lavavej – Advanced STL, 3 of n
C9 Lectures: Stephan T Lavavej – Advanced STL, 4 of n
C9 Lectures: Stephan T Lavavej – Advanced STL, 5 of n

Visual C++ Team Blog
Grr… My VC++ Project Is Building Slower in VS2010. What Do I Do Now? (A Step by Step Guide)
C++/CLI IntelliSense in Visual Studio vNext
Exception Boundaries: Working With Multiple Error Handling Mechanisms
Troubleshooting Tips for IntelliSense Slowness
Build Related Improvement in VS2010 SP1
Converting An MFC Ribbon To Designer Format
Enforcing Correct Concurrent Access of Class Data

Parallel Programming in Native Code Blog
Sorting in PPL
How to pick your parallel sort?
The Concurrency Runtime and Visual C++ 2010: Lambda Expressions
The Concurrency Runtime and Visual C++ 2010: Automatic Type Deduction
The Concurrency Runtime and Visual C++ 2010: The decltype Type Specifier
The Concurrency Runtime and Visual C++ 2010: Rvalue References
The Concurrency Runtime and Visual C++ 2010: Transporting Exceptions between Threads
Building Responsive GUI Applications with PPL Tasks

MSDN Magazine
Writing a Debugging Tools for Windows Extension
Writing a Debugging Tools for Windows Extension, Part 2: Output
Writing a Debugging Tools for Windows Extension, Part 3: Clients and Callbacks
Agile C++ Development and Testing with Visual Studio and TFS

Books & Publications
Parallel Programming with Microsoft Visual C++
The Visual C++ Weekly

Code & Samples
Code samples for the Concurrency Runtime and Parallel Pattern Library in Visual Studio 2010
Bing Maps Trip Optimizer
Hilo: Developing C++ Applications for Windows 7
All-in-One Code Framework

11 Replies to “C++ Renaissance at Microsoft”

  1. One area where you won’t see .NET / C# / VB creep in — embedded systems. These are the waters I swim in every day.

    About 75% of the work is C, about 20% C++, and then there’s always the 5% (probably more like 1%) of the time you’re coding in assembly language. Things like accessing specific registers, optimizing an ISR to run 2 microseconds faster (when your interrupt rate approaches 20 kHZ, and you’re only running at 70 MHz, those usecs matter!)

    Anyway, regarding C++, I’d like to see more embedded systems developers embrace c++ (I’m talking about the deeply embedded guys, not the guys writing code for a dual core 1.5GHz PowerPC with 8GB of RAM – that’s basically a PC.)

    C++, as a systems programming language, has versatility that is only approached by C. C++ allows you to do so much more. RAII, templates, better typesafety & enforcement of encapsulation, etc.

    Alas, there is a downside: complexity. No matter what people say, it is a very complicated language. It’s always an experienced C++ developer saying “It’s not that bad.” Yet there are so many details, so many nuances, so many rules & exceptions, it’s just very difficult to keep it all in the forefront of one’s mind.

    People say C++11 (or whatever it’s called) helps with this. I’m not convinced.

  2. I don’t buy this “C++ Renaissance” stuff at Microsoft until I see C++ supported on all their platforms.

    Windows Phone supports only managed code for 3rd party developers.

  3. Cristian, I can confirm you that there are special parteners that have access to a special SDK for Windows Phone 7 via C++. An example is Nokia’s OVI maps and other example is Adobe with Flash. Don’t imagine that Adobe will re-write the Flash engine in .Net. 🙂

  4. Yes, there are some OEMs that do have access to a native WP7 API, but that is not available for 3rd party developers, and I think that’s Cristian’s point here.

  5. C++ is crumbling under it’s own weight. MS will continue to invest into the language no doubt, but it’s just not the first class citizen anymore. At the same time the language investments doesn’t mean that you have rich and easy to use frameworks built on top of it, which is really a bummer.

  6. As a short answer to this, I don’t believe Microsoft is going native. On the contrary, it will continue its push towards more managed code. However, there has been some revival in C++ (native) interest, and I hope that will increase even more.

  7. It’s time to bury C++. C++ is a dead horse baby. It is a bloated carcass maggots are feeding off of. It doesn’t properly support Unicode. Why not support D or Object C instead?

    C++ is dead baby everyone is just arguing over it’s replacement. Apple is succeeding at the expanse of C++ and Java (Objective C). Android is a fork in Java. C++ templates are inferior to Digtal Mars D’s templates. C# and Java are an attempt to address the deficiencies with C++ both of which fail at addressing it’s complexity and improper system focus. C++ is a convoluted disaster. C++ is overly complex and backward and designed and maintained by a committee which couldn’t agree on Unicode streams support. D unlike C++ has proper Unicode support. A large part of the complexity of C++ is in multiple inheritance and bloat. C++ lacks proper garbage collection unlike D. C++ also has the library bolted on known as STL as an afterthought. With D you can use inline assembly.

    This is a C++ Template example

    using namespace std;

    T GetMax (T a, T b) {
    T result;
    result = (a>b)? a : b;
    return (result);

    This is a D Template example

    template Foo(T, U)
    class Bar { … }

    T foo(T t, U u) { … }

    T abc;

    typedef T* Footype; // any declarations can be templated

    Java also borrows from C++ for templates which was a big mistake.

    public interface List {
    void add(E x);
    Iterator iterator();
    public interface Iterator {
    E next();
    boolean hasNext();

    Down with C++.

  8. Renaissance or not, Microsoft apparently stopped distributing Microsoft Visual Studio 2010 Express Edition last month…

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.