Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Everett: The next Big Thing for Visual C++ developers

0.00/5 (No votes)
8 Nov 2002 23  
Microsoft's Visual C++ .NET Product Manager talks about the changes in store for the next version of Visual Studio .NET

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

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here