I'm here at PDC, and it hass been great to meet so many C++ developers. Of course, the best part of this week is that Visual C++ has finally announced the new language design for C++. As I mentioned last time, I will spend a while covering rationale and design behind this language design. Before going through the design process and some of the history in the language, I'll cover highlights of what we learned from managed extensions.
I could go on forever on lessons learned. A frequent message that we heard was developers like C++ and wanted to use it, but managed extensions were just too hard to use. More concerning is that some of the design decisions in managed extensions actually prevented us from innovating in the language. For example, the usage of pointers made it impossible to make use of operator overloading CLR types, as user defined operators do not apply to pointers. Based on significant feedback, we decided to redesign the CLR features in C++.
Several things have greatly benefited the new language design. First, we actively sought feedback from C++ community leaders. Compiler vendors, library developers, and others were involved very early on. They were given the opportunity to provide feedback, and we listened and acted. Second, we started by setting goals for the language design. As more people were involved, it was easier to get randomized with different approaches to solving problems. By having a list of goals available, we were able to measure each of these solutions.
Many people from Microsoft were involved in creating a solid language design. From the compiler side, Mark Hall and Jonathan Caves have brought significant experience in writing the Visual C++ compiler and doing much of the work that made the Managed Extensions language possible. Jeff Peil brought a wealth of knowledge about the C++ standard, the internal working of the CLR, and a keen understanding of how C++ is used in production. Chris Lucas led the language design team for a while to set the goals and direction for the language design. Herb Sutter facilitated the community involvement and standardization process, and recently started leading the design team to guide it through some difficult decisions. Anson Tsao and Martyn Lovell have been involved from the libraries aspect – both building libraries with the new language and ensuring common C++ practices were enabled by the language design. Finally, I have been involved working on the language semantics, implementation schedule, and language specification document. Of course there a dozens more people who are implementing this language and actively involved in the design. As I cover more specific areas, I will mention who was involved.
Knowing that, Chris Lucas is the one to thank for setting the language design team in the right direction. Extending a language is much more difficult than creating a new language from scratch. He started by reading Bjarne Stroustrup's book, "The Design and Evolution of C++." Many of the design goals of C++ still resonated today, and they were adapted to the goals we finalized upon. Here is a summary of those goals:
General Rule
Design Rules
Technical Rules
Support Rules
There is a lot behind each of these rules. I'll spare everyone from an in depth discussion of each one (someday it will probably end up in a book). In the end, we had a very simple mantra that the language design team lived by: Bring C++ to .NET. Bring .NET to C++. In that short phrase lies a lot of power. C++ has so much to offer, as does .NET. It was our goal to bring the best of both worlds together. In many ways, we believe we've succeeded at tackling this challenge. As we continue to gain experience and feedback, we are confident that C++ will continue to provide the power and flexibility that make C++ developers the best in the world.
Next time, I'll share some of the things I've heard at PDC as well as provide some background on the type of developer the Visual C++ group is building a product for.