C++ has long been a mainstay of the computing industry, gaining significant adoption since it came on the scene in the early 1980s. Yet even with its rich history, it continues to evolve in meaningful ways, now on a faster cadence than we’ve seen in the past. In fact, this has already been a big year for C++. In April, less than two years after the ratification of C++11, the ISO C++ committee voted to adopt the feature set for the upcoming C++14 standard, which is expected to be done in the next year and which rounds out the C++11 standard with key features like generic lambdas.
We started on the path of C++11 support in Visual C++ with our Visual Studio 2010 release, in which we implemented several C++11 features, including auto and lambda functions. In Visual Studio 2012, we implemented more of the standard, with support for features like range-based for loops, standard threads, and futures. And this week we announced Visual Studio 2013 Preview, which as I noted in my blog post on the Preview earlier this week, provides more C++11 support, including capabilities like variadic templates and delegating constructors. However, as several of you have pointed out in comments on that post, we still have a ways to go in providing full support for C++11.
Today at his Build 2013 conference session on “The Future of C++”, Herb Sutter (an architect on our Visual C++ team and the convener of the ISO C++ standards committee) announced a roadmap for when Visual C++ would implement the complete feature set of the current ISO C++ standard. Because C++14 “completes C++11,” and because as of two months ago we now know C++14’s feature set, we consider draft C++14 to be the current target. I think a particular statement of Herb’s clarifies our approach nicely:
“Visual C++ is targeting C++14, so we’re treating all the new features in C++11 and C++14 as a single bucket of work to do. We’ll do all of the features, but we’ll work on them in the order that delivers the most value soonest to customers. That means we will implement all of C++11 and C++14, but some high-value C++14 features, such as generic lambdas, should come before others from C++11.”
We will share a more specific timeframe for full conformance as we work through the details, but the following slide from Herb’s talk presented what we know now, listing the features remaining to be added and the approximate order in which we expect them to appear.
There are six “buckets” of remaining language features which together will bring Visual C++ to be a full implementation of not only C++11 and C++14, but also the “C++14 wave” that includes three additional technical specifications also expected to be completed by the ISO C++ committee in the next year: a file system library based on Boost File System version 3 (the previous version 2 is already included in Visual C++ 2012), an initial networking library, and set of language extensions called “Concepts” that enable expressing template constraints and are important to improve template type-checking and deliver greatly improved diagnostics.
The first two buckets of features will be available in Visual C++ 2013 RTM later this year. Herb also announced that, in response to customer requests, the RTM version will also include a few tactical C99 language extensions when compiling C code, so that some popular community libraries (including FFmpeg) will now be able to compile with Visual C++ 2013.
Some subset of the next two buckets, which include some of the most highly anticipated C++14 features (such as generic lambdas and generalized lambda capture) are already being implemented in parallel with our work on Visual C++ 2013 and will ship in a CTP release soon after the Visual C++ 2013 RTM. This CTP will also include an implementation of the async/await feature Microsoft is proposing for the C++ standard; async/await has not only been the number one request from our C++/CX customers for WinRT programming, it is more generally wonderfully useful for any asynchronous code.
Herb also announced today the GoingNative conference, happening in a few months on September 4-6 on Microsoft’s campus in Redmond, WA. At that event, we will be able to share another progress update with more specific details on the timing and feature set of the upcoming CTP and related work announced in today’s roadmap. The GoingNative conference will include a keynote by Bjarne Stroustrup, the creator of C++, as well as talks by a “who’s who” of the C++ community and active standards committee members: Scott Meyers, Andrei Alexandrescu of Facebook, Chandler Carruth of Google, Stephan T. Lavavej of Microsoft, Sean Parent of Adobe, Michael Wong of IBM (who also represents Canada in ISO C++ and who is the current chairman of OpenMP), and more. Registration for the conference is now open.
We are delighted to see the continued momentum behind C++ across the industry, and we look forward to continuing to being a part of this important language and community. For more information and to discuss these efforts, please see the Visual C++ team blog.
Follow me on Twitter at https://twitter.com/ssomasegar.