Good morning!

I really meant to write earlier. I've been busy preparing for a trip to the Netherlands, where I am right now. I'll talk about that tomorrow.

Anyways, I promised I'd talk about what I heard from C++ developers at PDC. After so many years of customer concern that Microsoft didn't care about Microsoft, it was great to see how excited people were to know that C++ has a vibrant future. Of course there was the introduction of the new language design, but the message that I think was best received was that rewriting applications to take advantage of WinFX is unnecessary and almost always the wrong approach. Many people didn't know that existing C++ code can run on top of the CLR without any modification.

That's right, you heard me. The CLR is rich enough to express all of the C++ semantics. In Visual C++ 7.0, we introduced the /clr switch. As a home experiment, just try it – take any program, compile it with /clr, and chances are really high that it will just work. That is where the acronym IJW (it just works) came from. I was surprised at how many people didn't know about this. We're officially calling this feature (at least for now) C++ interop.

Of course, the great thing is that in Visual C++ "Whidbey", this feature is improving. How can something that is named "It Just Works" be improved? Well, for starters we can improve on some of the performance issues. Undoubtedly, anyone who ran the experiment above would have taken notice of a noticeable slowdown. In Whidbey, we've done several things to address this. Two of them are the __clrcall calling convention, which allows a program to avoid the top performance culprit "double thunking", and the /clr:pure switch which also avoids double thunking, but enables some CLR features that did not work with C++. Double thunking is an interesting topic, and I'll write about it later.

Another way that "Whidbey" improves the IJW feature is that we're doing a lot of the ground work in the libraries to take existing programs and let them use the Frameworks. The best example is we're enabling MFC programs to use WinForms. Naturally, much of the work will allow MFC to make use of other Frameworks APIs too. That means all the MFC programs out there can start using WinFX without ripping and replacing their current code.

Another thing I heard from PDC is that running on down-level platforms that do not have WinFX is crucial. This is similar to versioning the Win32 API. It was possible for programs to test whether the operating system had a particular API, and then change behavior based on the results. This was done with delay loading a DLL and using GetProcAddress. In the WinFX world, it changes. We're currently working on creating the best practice for doing this. It is sufficient to say that this will be possible.

Many customers asked how Microsoft applications are going to take advantage of WinFX. Naturally, quite a few developers like to see how Microsoft does something first. Just as many customers are looking into WinFX, so are all the applications around Microsoft. Existing C++ applications (that's pretty much everything Microsoft currently ships) are using Visual C++ to take advantage of WinFX. A few places where other languages make sense, other languages are being used. Another feature that Visual C++ "Whidbey" introduces is MSIL linking, which allows anyone to take a .netmodule generated by any other language, and link it into a C++ program as if the .netmodule were just another object file.

I also got asked, "What is it like to work with Herb Sutter?" Of course, Herb is great person to work with, and certainly brings another point of view to discussions. I barely knew I was working with celebrity. J It was too bad the Southern California fires prevented Herb from showing up at PDC. At the same time, Herb was at the C++ Standard WG21 meeting. Quite a few things are going on there, but we also took a chance to let everyone else on WG21 know what was going on with ECMA and the new language features that bind C++ to the CLI.

Another celebrity I was asked about is Stan Lippman. People definitely missed him at the PDC. I completely forgot to mention Stan in my last posting. Stan definitely has provided a number of contributions to the new language design. As I get to discussing individual language elements in more depth, I'll certainly show where Stan deserves much of the credit. Right now Stan, one of the projects Stan is working on is a translation tool from the managed extensions syntax to the new C++ syntax. In fact, Stan has the best expertise in this area. Sooner or later, he too will have a blog. I'll mention when that happens.

In the end, the one message I heard from customers was "thank you". There are a lot of C++ developers out there who are very excited about what Visual C++ "Whidbey" will deliver. I heard comments to the effect of "Visual C++ is back" and "C++ is on its way to being the top language again." We're very excited to see customers excited about Visual C++. C++ is definitely the most enabling language I have ever worked with, and we can't wait to see what C++ developers are going to do with WinFX.