Click here to Skip to main content
13,405,744 members (55,901 online)
Click here to Skip to main content
Add your own
alternative version


20 bookmarked
Posted 7 Nov 2002

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

, 8 Nov 2002
Rate this:
Please Sign up or sign in to vote.
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) 
  • Implicit invocation of ptr-to-func conversions 
  • 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
  • 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


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Chris Maunder
Founder CodeProject
Canada Canada
Chris is the Co-founder, Administrator, Architect, Chief Editor and Shameless Hack who wrote and runs The Code Project. He's been programming since 1988 while pretending to be, in various guises, an astrophysicist, mathematician, physicist, hydrologist, geomorphologist, defence intelligence researcher and then, when all that got a bit rough on the nerves, a web developer. He is a Microsoft Visual C++ MVP both globally and for Canada locally.

His programming experience includes C/C++, C#, SQL, MFC, ASP, ASP.NET, and far, far too much FORTRAN. He has worked on PocketPCs, AIX mainframes, Sun workstations, and a CRAY YMP C90 behemoth but finds notebooks take up less desk space.

He dodges, he weaves, and he never gets enough sleep. He is kind to small animals.

Chris was born and bred in Australia but splits his time between Toronto and Melbourne, depending on the weather. For relaxation he is into road cycling, snowboarding, rock climbing, and storm chasing.

You may also be interested in...


Comments and Discussions

QuestionBlocking .csproj format with Everett ? Pin
.S.Rod.9-Nov-02 22:14
member.S.Rod.9-Nov-02 22:14 
Someone posted a while ago an article with C# source code obviously made with Everett beta. Guess what, the project files wouldn't even open in VC#.NET 1.0, and the program itself wouldn't even run because of an hardcoded .NET virtual machine path somewhere in the compiled code (the path was generated by the use of the IDE, not by the developer).

I thus question the ability of MS to :
- introduce a new release without forcing people to upgrade their code as well (which is of course a highly questionable money concern), and prevent them from using it any longer with VS.NET 1.0 (for instance, in the .csproj file from Everett beta, the change I saw was an xml attribute value, and it was blocking the whole .csproj backward or forward depending on the version you had).
- promote versioned products that don't explicitely require users to install ALL POSSIBLE .NET run-time versions instead of only one, because the target code is highly coupled with the .NET run-time version. If you don't have the .NET run-time, or you have a wrong version, you'll be rewarded with a nasty message box, and that's all. As soon as Everett is RTM, developers and users will have to download and install the associated .NET run-time, in addition to their existing one. Users will resent a lot developers for being forced to download again and again tons of megabytes. Developers are going to have a hard time to figure out what version to compile against.

Back to real work : D-21.
AnswerRe: Blocking .csproj format with Everett ? Pin
Anonymous9-Nov-02 23:51
sussAnonymous9-Nov-02 23:51 
GeneralRe: Blocking .csproj format with Everett ? Pin
.S.Rod.10-Nov-02 0:03
member.S.Rod.10-Nov-02 0:03 
GeneralRe: Blocking .csproj format with Everett ? Pin
Christian Graus10-Nov-02 22:20
memberChristian Graus10-Nov-02 22:20 
GeneralRe: Blocking .csproj format with Everett ? Pin
.S.Rod.10-Nov-02 22:39
member.S.Rod.10-Nov-02 22:39 
GeneralRe: Blocking .csproj format with Everett ? Pin
Christian Graus10-Nov-02 22:49
memberChristian Graus10-Nov-02 22:49 
GeneralRe: Blocking .csproj format with Everett ? Pin
.S.Rod.10-Nov-02 23:04
member.S.Rod.10-Nov-02 23:04 
GeneralRe: Blocking .csproj format with Everett ? Pin
Christian Graus10-Nov-02 23:26
memberChristian Graus10-Nov-02 23:26 
GeneralRe: Blocking .csproj format with Everett ? Pin
Eugene Polonsky11-Nov-02 15:09
memberEugene Polonsky11-Nov-02 15:09 
GeneralRe: Blocking .csproj format with Everett ? Pin
Christian Graus11-Nov-02 15:53
memberChristian Graus11-Nov-02 15:53 
GeneralRe: Blocking .csproj format with Everett ? Pin
.S.Rod.11-Nov-02 21:53
member.S.Rod.11-Nov-02 21:53 
GeneralRe: Blocking .csproj format with Everett ? Pin
Martin Häsemeyer12-Nov-02 6:24
memberMartin Häsemeyer12-Nov-02 6:24 
GeneralRe: Blocking .csproj format with Everett ? Pin
Jamie Nordmeyer15-Nov-02 7:33
memberJamie Nordmeyer15-Nov-02 7:33 
GeneralRe: Blocking .csproj format with Everett ? Pin
Christian Graus15-Nov-02 11:10
memberChristian Graus15-Nov-02 11:10 
GeneralRe: Blocking .csproj format with Everett ? Pin
Jamie Nordmeyer15-Nov-02 11:33
memberJamie Nordmeyer15-Nov-02 11:33 
GeneralRe: Blocking .csproj format with Everett ? Pin
Christian Graus15-Nov-02 11:41
memberChristian Graus15-Nov-02 11:41 
GeneralRe: Blocking .csproj format with Everett ? Pin
Jamie Nordmeyer15-Nov-02 12:00
memberJamie Nordmeyer15-Nov-02 12:00 
GeneralRe: Blocking .csproj format with Everett ? Pin
Christian Graus15-Nov-02 12:02
memberChristian Graus15-Nov-02 12:02 
GeneralRe: Blocking .csproj format with Everett ? Pin
Rickard Andersson15-Nov-02 13:02
memberRickard Andersson15-Nov-02 13:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.180221.1 | Last Updated 9 Nov 2002
Article Copyright 2002 by Chris Maunder
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid