Microsoft's Visual C++ .NET Product Manager on Everett.
Nick Hodapp is the Microsoft Visual C++ .NET Product Manager, and the author
of our monthly Semicolon column. One of his primary jobs is to keep a finger on
the pulse of the Visual C++ community and in turn feed that data back into his
product team at Microsoft. "It's a hard job - we're a dynamic (and sometimes unruly) bunch".
Back when Visual Studio .NET 2002 was released the shining star was C#,
followed closely by VB.NET. C++ developers were in many cases left out in the
cold. Sure, we had Managed Extensions and ATL Server, but no Windows Forms
designer and no chance to use VC++.NET in ASP.NET (unless you enjoyed having IIS
crash that is). We got some nice optimisations and inbuilt security checks but
to many it seemed that Visual C++ had been ignored and would be relegated to
system level programming. In short it seemed that Visual C++ would end up in the
retirement home for antiquated languages swapping stories of glory days with
FORTRAN.
Microsoft will soon be releasing Everett (the release date is yet
unannounced; they are saying "early next year"). We've had teasers for almost a
year on what will be included but nothing concrete. Today, however, Bill Gates
has pulled much of the wraps off of Everett, as it were, and I spoke to Nick to get the low-down
on what Everett includes for Visual C++ developers.
First off: What is Everett?
Everett is the codename for the next release of Visual Studio .NET - the
official name is still under wraps. Everett is a major release for Visual
C++ developers, and is largely an incremental upgrade for C# and Visual Basic
.NET developers.
So what's in it for C++ developers then?
The biggest things in Everett are: conformance to the ISO standard, support for the Windows Forms designer;
new compiler optimizations and code security feature enhancements
There are also a few minor bug fixes for managed extensions, the MFC/ATL
libraries and also a bunch of fixes in the Debugger and IDE.
Microsoft people have been hinting about the conformance work in this
release for well over a year. What exactly are we getting?
In Everett we've achieved 98% conformance to the C++ ISO standard. No
compiler reaches 100%, and it turns out that conformance is a difficult thing to
measure since there is no singly accepted test suite. We used 3 -
Perennial, Plumb Hall, and Dinkumware - and are passing each above the 98% line.
But our favorite benchmark is that we're compiling the popular Boost, Blitz, and
Loki libraries without the need for special workarounds. We feel that the
great number of innovations in C++ are occurring in these community written libraries,
and it is important that Visual C++ be able to compile them. Visual C++ developers
will now be able to use the same
libraries that the rest of the C++ community, making them part of the greater
C++ community. That aside, we'll finally be able to write code using
some of the advanced template features defined in the standard.
We're not at 100%, yet, but expect that we'll remain on the path towards full
conformance. In particular, the ISO features "Export" and "Exception
Specifications" are tricky, and there is much debate as to their usefulness.
They remain on the plate.
Nick sent along a list of specific features that are now in the compiler.
They include:
- 2.2 Unicode identifiers
- 3.4.2 Full Koenig lookup
- 8.5.1 Empty aggregate initialization
- 9.8 Symbol lookup for local member functions
- 11.4 Friends in class templates (also 14.5.3)
- 13.3.1.1.2 Implicit invocation of ptr-to-func conversions
- 13.3.3.2 Ranking of derived to base conversions
- 14.1 Non-type template parameters (also 14.3.2)
- 14.5.2 User-defined conversion templates
- 14.5.4 Partial specialization of class templates
- 14.5.5.2 Partial ordering of function templates
- 14.7.1 Nested classes in class templates
- 14.7.3 Explicit specialization of member templates
- 15.5.2 The unexpected() function
VC7 already had some nice improvements in performance - which is impressive
considering it was the 13th revision of the compiler and yet they still eked out
something like a 10% gain. What do we get for 7.1?
C++ is chosen for its performance so we always want to ensure our compiler
is the best. To do this we've introduced new switches for apps targeting Pentium
IV and Athlon chips that can potentially provide another 5-10%, depending on the
type of code being written. For
heavy floating point operations you may see up to 15% performance gains.
Two new switches, /arch:SSE and /arch:SSE2 target Streaming SIMD instructions
on modern processors. We see around a 2-3% perf
boost when using this for floating point code.
And, we've enhanced existing optimizations like Whole Program Optimization.
You mentioned improved code security for C++ applications. In what form?
C++ is lean and mean but it can also is discredited in terms of code security. Microsoft is very focused on securing our own products as well as
those of our customers so we introduced the /GS flag in VS.NET as a tool to help
mitigate buffer overrun vulnerabilities. In Everett we've expanded the repertoire of
attacks that the compiler 'understands'. We've also enhanced the feature so that
it works in cooperation Windows .NET Server.
Applications compiled with /GS and running on Windows .NET Server will have
their exception table loaded by the OS at load time. If an exception occurs
while the program is running the OS will check the location of the instruction
that the program is trying to jump to in order to handle the exception. If the
address isn't in the table originally loaded by the OS then an attack is assumed
underway and the program is halted immediately. This turns a
potentially devastating problem into merely an ugly but safe problem.
But will applications suffer a performance hit if they use these security
checks?
Generally "no". The new compiler produces code that is even more optimized
than the shipping product or VC6, so the improved speed you get by compiling
with Everett outweighs any perf hit you would get by compiling with /GS. The worst case scenario we have
seen is a 2% degradation, but in general we hardly notice anything. In
Everett,
there are only nine instructions for every successful security check, and all of
those instructions are easy to cache and don�t cause branch mispredictions. So
overall compiling code in Everett with optimizations and /GS is going to result
in faster code than that produced by previous versions.
One of the most notable features missing from VS.NET was Windows Form
designer support for VC++. It's been mentioned a ton of times but has it been
delivered?
Yes. Everett includes RAD support for Windows Forms for VC++.NET.
What about ASP.NET support?
There is a known issue in the shipping product where components built using Managed C++
sometimes crashed IIS if called from ASP.NET pages. This is a documented App-Domain issue
and it is fixed in Everett. Managed C++ components can now be used freely in ASP.NET applications.
There is no Web Forms support for C++. It's something
we've thought about a lot but to be honest there doesn't seem to be any demand
to include it.
Have the bugs in the IDE related to VC++ been squashed?
What bugs are those again? Seriously though, we've done a lot of work
to refine the IDE for C++ developers. It's not "all new" again, but we did
fix a lot of problems with the project-build system, with the task list, and
with dynamic help. Oh, and some of the resource-editor bugs that keep
getting mentioned on CodeProject. I sure hope we got the majority of
those.
So when do we see Visual Studio .NET 2003?
We're still aiming to RTM this year. Assuming that it will hit the
streets early next year. Lots of factors combine to set a release date,
and they're not all related to Visual C++. Please be patient!
The Visual Studio .NET 'Everett' upgrade path
With a new version of Visual Studio .NET imminent, many developers are
hesitant to purchase the current version of Visual Studio .NET out of fear that
the product they've purchased will be out of date within months. Microsoft have
announced in their roadmap
that MSDN subscribers (Universal, Enterprise, or Professional) will get the
update as soon as it's released, and that owners of Visual Studio .NET will be
able to upgrade for $29 (to cover the cost of media, postage and handling). If
you have Visual Studio .NET and don't wish to pay the $29 then Microsoft will be
offering a free service pack at the same time that will include bug fixes
to VS.NET only.
More News