Gamecraft

This blog is all about the craft of making games, and in particular, computer games. Gamecraft involves a broad range of topics, including design, development, quality control, packaging, marketing, management, and life experience.

Name: Gregg Seelhoff
Location: East Lansing, Michigan, United States

Monday, November 28, 2005

Microsoft Visual Studio 2005

Here is my quick review of this updated development system.

Over the weekend, I took a break from productivity to finally check out Microsoft Visual Studio 2005. The DVDs had been sitting here quietly staring at me ever since I got them early this month, so I finally made some time to install it and see how it measures up to Microsoft Visual Studio / Visual C++ 6.0, which I currently use (and prefer) for the bulk of my development work.

To set the scene, I already had Microsoft Visual Studio .NET 2003 on my system, though I never bothered to try the 2002 version. The only good thing about this product was that it would peacefully coexist with the earlier (not .NET) version, save a few stolen file associations; otherwise, though, the product was a dog. In preparation for a review, I had started on my second full page of notes about problems before I gave up on VS .NET 2003 entirely. I simply did not uninstall for fear (later proven justified) that it would mess up my productive and usable development system.

I had read a few glowing reviews of Microsoft Visual Studio 2005, so I was hoping that they were accurate and that I could safely upgrade for new projects, since Microsoft seems to be actively campaigning to eliminate my current system. Apparently the phrase "compiler that is seven years old" appears on some list of talking points, as though it were derogatory. Lame.

Well, I uninstalled VS .NET 2003 and began the installation of VS 2005. The first thing to notice is that somebody in marketing figured out that ".NET" does not sell product (but does allow ".NOT" comments), and therefore that portion of the name is gone. The installation was smooth, and faster than for the predecessor, although the stylized graphics overlaid upon the same three people looked like they were either peering through a jungle gym or possibly prison bars. The selection of models was interesting, too.

After installation was complete, I went to create my first simple project. The missing ".NET" was the elephant in the room, as none of the options mention .NET by name, and knowing that it was a large part of this product, I was not sure what to avoid. Absolutely the last thing I want to do is accidentally build a game that requires another 24M download. I believe that "CLR" (for Common Language Runtime) is the first euphemistic acronym I have encountered in my career, though I could be forgetting something. I will also note that there are no project options for creating a static library (.LIB), nor for a standard DLL, unless it uses MFC. (Yuck.)

Anyway, the answer was that "Win32 Project" implies no .NET or CLR dependency. The empty project was created nicely, and I went to type a copyright symbol in my file header. No dice. It seems that the standard [Alt][0][1][6][9] does not work in the editor, a major oversight in my book. Wait a second. It works if I toggle the [NumLock] key to on. It also apparently works in a "text file" but not in a "C++ file", so it may have something to do with the silly code outlining.

The good news is that Microsoft finally figured out how to make a help window pop up maximized, which is a massive improvement from VS 2003 being challenged to even get the miniscule window onto the correct monitor, nevermind properly sized. Unfortunately, the default for help is to hit the internet first before checking the almost 2G of help that I just put on my hard drive. That is an amazingly stupid default. Worse, I was just checking for WinMain() documentation and it just jumped to the first (wrong) thing it found, and when I got to the correct page, the declaration for the function was simply wrong!

I will also mention that much of the user interface is gratuitous fluff. There is no purpose to the non-standard menus, nor to the altered toolbar. Some standard items from version 6.0 were altered in strange ways that just made them harder to use. Whoever thought that pulldown menus to select an output window was a better idea than the tabs used previously was delusional, and the concept of windows (or options) appearing and disappearing based on context is much more confusing than useful.

When it comes to interface customization, though, the team struck out by removing icons from functions that had them in previous versions, so for my PC-lint toolbar icon, I can have text only, draw my own by hand (no pasting!), or select from a small palette of irrelevant images. (I now click an eight ball to lint a file, or a smiley face to lint the whole project.) The new icons provided look nice, but eliminating icons was a definite, if minor, step backwards.

So here is the heart of the matter for using VS 2005: actual development. I was able to use the editor and it did not seem as sluggish as the 2003 version. I was able to ignore the outlining and annoying highlighting fairly quickly so productivity there was not adversely impacted. I loaded up a version of Most Popular Solitaire and attempted to compile it. There is a new set of warnings about certain "unsafe" library calls, which were easy (albeit unnecessary) to address, and then the project compiled. It is also executed just fine.

This review needs benchmarks, of course. Actually, I only realized it needed benchmarks when I noticed a discernible (read: obvious) difference in compilation speed. One feature that VS 2005 advertises is simultaneous compilation, which seems like it should benefit my multi-processor development system. A complete rebuild of the Most Popular Solitaire project consists of three executables: release, debug, and checked. I timed a complete rebuild of the same project on my system, first with MSVC 6.0 and then with VS 2005 (allowing for the possibility of a speed advantage for the latter due to drive caching).

The difference in compilation speed was dramatic, 67 seconds versus 5 minutes 12 (312 seconds). The only problem is that the "compiler that is seven years old" was the quick one. The old compiler is roughly four and a half times the speed of the "improved" version. When I am programming, I compile quite often, and this difference between the two products could definitely impact my productivity adversely. Making the switch to VS 2005 would cost me an hour for every 15 rebuilds (of a fairly small project). Yikes!

The bottom line is that Microsoft Visual Studio 2005 is only decent when compared to its immediate predecessor, but the .NET line of this development system has still not reached the functional level achieved by the last of the purely native compilers, although it is getting closer. If one needs a feature unique to VS 2005, such as smart device emulation or .NET compilation, then this system is usable. If you are, like most shareware and PC game developers, developing native games or applications for Windows, I recommend sticking with Microsoft Visual Studio 6.0 (with all of the service packs, of course).

21 Comments:

Anonymous Scott Anderson said...

Your dislike of VS.NET 2005 (and 2003) is odd. You can create static libs and dll projects in Visual Studio 2005, although its all wrapped into one "win32 project" wizard. The compiler is much, much better than Visual Studio 6.0. Its one of the most standards compliant C++ compilers out there. Intellisense is very much improved. Yes, there are many features that are geared entirely toward the CLR and don't work for native C++ development, but overall it is an improvement over VS.NET 2003 and definitely VC 6.0. There are other nice features like OpenMP support and profile guided optimization, but you probably don't care about those.

Slower compile times are a big issue, but the question is, do you do a full build everytime you're compiling your application? If iteration time is a concern, than you should be benchmarking incremental builds not full builds.

If Visual Studio 6.0 works for you, by all means stick with it, but don't dismiss the newer products so quickly.

December 12, 2005 10:13 PM  
Blogger Gregg Seelhoff said...

It is not so much that I dislike Visual Studio 2005 as that I recognize it as primarily Microsoft "churn", and I am certainly not the only one who sees that. (It is certainly better than Apple XCode, for example, but that is free.)

The fundamental purpose of a compiler is to compile source code into optimized object code. This product does this fine, but not discernibly better than VS6, with a significant productivity penalty when compared to the older compiler. Better standards compliance is nice from a theoretical standpoint, but not at such a tangible practical cost.

The primary purpose of a development environment is to improve productivity, and this product is net negative in that regard. Improved Intellisense hardly overcomes the "changes for the sake of change" interface.

Native C++ development in Visual Studio 2005 is slower than in Visual Studio 6.0, the compile times are significantly longer, and the resulting code is no better, so in my opinion, there is no good reason for somebody in my position to upgrade.

December 14, 2005 11:32 AM  
Anonymous Anonymous said...

When we moved from 6 -> 2003 the compiler picked up a number of gratuitous errors which had just been compiling under 6 (generating God knows what code), the 2003 compiler also allowed us to use Boost. The STL implementation in 6 is also an abortion.

On the subject of 2005, it does not play nice with 2003, be warned. We lost the ability to edit any project properties, I had to re-install everthing from scratch.

I think we will be sticking with 2003 for a while.

December 29, 2005 10:30 PM  
Anonymous Anonymous said...

Interesting to read your experiences. I think I'll be sticking with VS6 for a while.

Andy Brice

January 06, 2006 3:08 AM  
Anonymous David Zimmerman said...

I just installed 2005 to test out if it would boost my code's performance. My code being a complex set of algorithms that are very floating point intense. It did not make any improvements off the blocks doing a straight recompile. I noticed a big difference from VC6 to 2003 however. Almost the same sort of boost I saw from upgrading to VC6 from VC5 (almost). Possibly if I take advantage of OpenMP I will see a boost in 2005.

I do like the interface of 2003 and 2005 much better than VC6. Tabbed windows and better layout make my day more productive.

As for your benchmark on compile time. You should enable "Minimal Rebuild" and select build instead of rebuild and 2003/5 will probably perform at par or better than VC6.

January 10, 2006 10:11 AM  
Anonymous Anonymous said...

I think that VS2005 is crap. The more you get into VS2005, the more you start to wonder if MS has become so big that it has lost its focus and edge. I think the html designer took 3 steps back.

April 14, 2006 2:43 AM  
Anonymous Anonymous said...

I lost almost one month trying to make VS 2005 working for me in a decent way.

Bugs everywhere that make impossible for one person to compile ten projects together in the order we need in Native C++.

Intellisense taking 80% of the 3 GHz CPU as soon as you change a line in any header file, up to the point that the mouse seems to move randomly... Even the option to disable it is buggy.

A 'QuickView' that works effectively only with CLR code ( non Native C++ ). You need to click the mouse five times in order to read the content of an STLport string.

Compilation times 3-4 times slower
(minimal rebuild doesn't help that much)

I went back to VS 2003
and reached the same conclusion:
probably Monopolistic MS has become so big that it has lost its focus and edge.

May 02, 2006 2:25 PM  
Anonymous Bloatware Avenger said...

I've been using Visual C++ 6.0 for some years as a professional games developer. In September we decided to upgrade and our experiences have been amazingly incredible. Visual C++ 6.0 took about 150 megabytes of HD, vs some gigabytes of the new version. Visual C++ 6.0 needs less than half the RAM, it's incredibly faster compiling, and the code compiled for 386 is not much slower than the SSE optimized code that the 2005 version generates. Forget about the promised speed increases in optimized code, it's not true. What they have optimized are the standard libraries, like STL, but I take my work seriously enough to not to depend on such a crap and slow library. If you generate optimized code by yourself the 2005 version is not going to improve anything at all. It was fun to see 200 fps (6.0, compiled for 386) vs 201 fps (2005, compiled for Athlon + SSE). I totally agree with the author, and also recommend Visual C++ 6 to any Ansi C + ASM developer. Even if you can't use SSE assembler. Shame on you Microsoft for requiring this rubbish compiler for 360 development. We now use a mixed enviroment, the 2005 version is only useful for what's needed, but the bulk of the work is done again on the great 6.0 one. Visual C++ 6.0 have it's own flags, but overall compared it's a very superior product. Intellisense is fast and doesn't produce 15 megabytes cache files for a project that generates a 30k executable. But hey, it's Microsoft. After trying Windows Vista I'm going to stick with XP, too. Bloatware everywhere guys :)

November 28, 2006 3:45 AM  
Blogger Jason said...

This post has been removed by the author.

November 28, 2006 4:11 PM  
Blogger Jason said...

2005 sucks!
The IDE when designing interfaces is slow and they've broken with so many conventions. They aren't even supporting the same shortcuts/keystrokes. ctrl+alt+shift+b is gone and not even accessible from the menu (that is the rebuild that gets new versions of class libs)
All of the quirkiness aside the speed makes my work day hell.

Honestly though I am just a boring database developer

November 28, 2006 4:13 PM  
Anonymous Anonymous said...

I am not primarily a C++ developer, although I've done it quite a bit in the past. These days I do mainly web development and for that VisualStudio 2005 and ASP.NET 2 are truly great. For sure the latest versions of Visual Studio are aimed at .net development and C++ is a secondary consideration. For the life of me, I never could figure out why MS didn't take a cue from Borland's C++ Builder and make a better GUI editor for Visual C++ - that always seemed to me to be the biggest area for potential improvement. I guess there just wasn't enough demand, but personally I've always found GUI development in Visual C++ to be quite primitive compared to Borland's wonderful IDEs.

December 19, 2006 2:57 AM  
Anonymous Anonymous said...

Agree with the general thread here that VS 2005 is a step forward for HTML development and a step backwards for C development. We write windows-based games not unlike the solitaire example and VS 6 was the best option but we also write dynamic web pages for our company to offer product downloads and demos and for that VS 2005 has some nice improvements.

January 25, 2007 10:08 AM  
Blogger ruud said...

I've tried VS2005 some time ago with a reasonably large project (a racing simulation game, the VS6 version can be found at www.racer.nl). Lots of libraries involved.

After getting through the strcpy() type of warnings, it took about 2 days to get things to compile & link & execute. I noticed the following:

Pros
- Intellisense got better

Cons
- code executed a bit slower than the VS6 version (perhaps due to some buffering protections that are built into VS2005; it does detect some buffer overflows nicely)
- compilation times were a lot slower (even with Minimal Rebuilds; probably because the files involved were larger)
- memory use for VS2005 was higher
- trouble with MFC apps (DLLs now being versioned in a way that is just so poorly designed...)

In essence, if you need .NET or such things, you'll need 2005, but I had to go back to VS6 to stay productive. Even though I would so much have liked to use the newer compiler; I think Visual C++ is one of the best (if not THE best) product MS has ever created.
Unfortunately that would kill productivity. VS2005 is a step back if you're just doing C++ development (mostly oriented at crossplatform work).

February 08, 2007 9:13 AM  
Anonymous Anonymous said...

Microsoft still writes all it's applications in c++. Less than 4% of Vista depends on .Net. All OS dlls are still native c++ libraries.
Now, if MSFT gives the the best and most productive C++ development platform, who of us will not build the next big consumer app or dev toolkit that can challenge the great MSFT itself? I think MSFT will never give us the best of what c++ has to offer. It's conflict of interest.. just my humble opine..

June 01, 2007 8:40 PM  
Blogger Gregg Seelhoff said...

>I think MSFT will never give us the best of what c++ has to offer.

Personally, I do not believe that Microsoft is holding anything back. I have some experience working with Microsoft (granted, several years ago), and my understanding is that they "eat their own dog food". The primary advantage they have is being able to talk directly to the person(s) who developed a portion of the OS or compiler/IDE (and having access to all technologies and documentation in their early stages).

In my opinion, Microsoft is not so much a monolith, but a huge conglomeration of, sometimes conflicting, parts and goals. Most failures are the result of poor planning or execution, not malice, and it only takes a little time writing for another platform to discover how good the Microsoft development tools are (rivaled only, perhaps, by CodeGear nee Borland).

June 04, 2007 12:29 AM  
Anonymous Anonymous said...

The 2005 compiler is a *vast* improvement over 6.0. I cannot believe that you could call standard compliance a theoretical gain. In that case, you must be writing either C or terrible C++ code.

And Bloatware, STL is a very well optimized library. If you don't rely on that but write everything yourself, you must not be very productive. (And yes, I do game development, engine development, myself).

I do agree though that compile times are a great problem.

August 21, 2007 9:54 AM  
Blogger Gregg Seelhoff said...

>I cannot believe that you could call standard compliance a theoretical gain. In that case, you must be writing either C or terrible C++ code.

It must take some conviction to anonymously post aspersions about code one has never seen.

Standards compliance is certainly preferred, but strict compliance at the cost of 80% of ones productivity is a poor tradeoff.

Granted, VC6 has at least one serious bug with template handling, but the workaround (adding a dummy parameter that gets optimized away) was simple enough to get it working without much fuss. (Compared to GCC in Xcode on the Mac, this is a minor failure.)

>I do agree though that compile times are a great problem.

Yup. :)

August 25, 2007 2:41 PM  
Anonymous jm said...

the html designer for 2005 sucks too much by being too reminiscent of frontpage 98. maybe they lost the source code for 2003's and had to recreate it? lol

November 12, 2007 5:51 PM  
Anonymous Anonymous said...

vc++ 6 and vb 6 was a high water mark for ms development. I still use it and see no reason whatsoever to get involved MS tragic attempt to ape Java - the proper cross platform support.

The win32 option to drop .net that is sneaking in is a relief.

I think gradually the .not products are getting better to reach and surpass vs6 but they still have a way to go,

i just dont understand how programmers (who must be in the top 10 percent of intelligence on the planet) can be led so easily astray by marketing and new shiny things, but i guess thats just human nature.

I personally reckon that the people who go on about how great .net is compared to vs6 just dont have a clue, there is object support in vs6, not great but enough.

Heres some further heresy, sometimes functional linear code is faster and more effective in solving a problem than a full OOP solution. The mantra "everything should be an object" seems a bit niave to me.

Why is it that MS office and other main products by MS are still programmed in C?

October 14, 2008 3:40 AM  
Blogger Warren said...

I'd be curious to hear anybody comment on VS 2008. Is it a step up from 2005 for gaming and serious code generation efficiency?

Warren

December 23, 2008 12:37 PM  
Blogger Gregg Seelhoff said...

>I'd be curious to hear anybody comment on VS 2008. Is it a step up from 2005 for gaming and serious code generation efficiency?

I have been using Visual Studio 2008 for some extraneous (i.e., non-game) projects, and I have not noticed any particular improvements, but I have not tested performance. I did test code generation speed and, unfortunately, it is no better than VS2005. With lots of fiddling with precompiled headers, it is possible to reduce this time to something manageable.

XNA Game Studio 3.0 now supports VS2008, but the previous version was an argument against upgrading. Now, if you are already using VS2005, you may as well upgrade for the sake of the nebulous feeling of being "current". :)

December 27, 2008 1:22 PM  

Post a Comment

<< Home