OK, I’ve spent my entire holiday weekend working with Visual Studio 2005 Express Edition. In particular, I’ve been working with VC++, writing what they tell me is unmanaged
code, whatever that means. After logging a few hours, I thought I’d share some feedback.
First, let me start by saying that this thing is really the real deal. If you’re trying to learn how to be a coder (on Windows), this toolkit will do it for you. There are some annoying holdbacks from Standard Edition and better, but overall this thing will work for producing serious software. If anything, Microsoft dramatically under-bills its capabilities on the website.
I’ve covered the missing SAL support, missing x64 compiler, and missing profile-guided optimization before, so I won’t re-hash all that. A couple of other irritating points came up, though. First off, Express Edition [apparently] doesn’t support building ATL projects, at least on x86. Getting the PSDK doesn’t help either; it is broken in at least two ways: it has a #pragma in atlbase.h to statically include atlthunk.lib, but there is no atlthunk.lib in the SDK. There’s no way to explain that one away. And, for the icing on the cake, there’s actually a c++ conformance bug in atlwin.h [IIRC] related to standard for() scoping.
I’ve complained about FrankenKits before, and while I was able to work around the atlthunk.lib issue by re-coding the missing functions in my own static library, I was reduced to editing the atlwin.h file in place. That is a huge no-no, and while it’s obviously not Express Edition’s fault per se, Standard Edition comes with enough ATL machinery that the PSDK’s crappy ATL is unnecessary. And as a parting shot: If you’re not going to support a feature (i.e. ATL), don’t include options in the project config for letting you specify how you want to link to ATL.
Which brings me to my second minor beef. One of the things I like about Standard Edition is the capability for organizing projects into sub-folders in Solution Explorer. I hate long lists – as much as I love build.exe, its requirement to keep everything in one directory[*] is really terrible. Same goes for projects in the IDE. So imagine my surprise when, after organizing all of the 40-ish projects in one of my workspacessolutions into folders using Standard Edition, Express Edition flatly refused to load those projects. I guess they had to pick some things to differentiate Express over, but maaaan, that one is just annoying. Fine, no profiler. But seriously: no subfolders?
A couple of other 1.0-ish problems happened now and again. For some reason, the IDE kept wanting to build projects that were unchanged on a couple of occasions. The compiler would fire up, realize there were no relevant changes, and rip through the file list in no time. But, it was annoying; a re-start of the IDE fixed it each time. Another nitpick is related to dependency ordering in the .sln file – every time you save the .sln, it reverses the order of the dependencies in the XML file. This has no effect when it comes to the IDE, but it’s hell on source control. I have tons of revisions of my .sln files that are essentially NOPs. Any white noise like this just makes it harder to keep your eyes open for relevant changes in a multi-user environment. Anyway, I suspect both of these bugs are in all of the 2005 editions, and I bet they’ll both be gone by SP1.
So, overall I’d give Express Edition an A-. If it had cost me money, it’d be a pretty solid B, but the price sure is right, and what they do ship is really very good. Enthusiastically recommended.
If you are still looking for atlthunk.lin, it can be found in the DDK SDK
Yeah, I saw it there. I just hate copying/pasting stuff around like that. I wound up writing a very small .cpp file that I checked into source control and use in my build.
Still, annoying…
[...] I’ve blogged before about how much I like Visual C++ Express Edition, but it does lack one feature that I consider to be extremely important: code analysis using /analyze (i.e. PREfast). I pointed this out a while ago, and Michael Howard responded a couple of days later that the Vista PSDK compilers do support /analyze. [...]
[...] I’ve blogged a few times about how good of a value I think Visual C++ Express Edition is. Just last week, I was telling someone that there just aren’t that many compelling differences between Express and Standard (or really even Professional, for my taste), until you get to the Team System stuff (about which I know very little). In fact, he went with Standard just because of ATL, which has been removed from the Vista PSDK. (sigh…) [...]
[...] So, with that, I’m sticking to my guns that Visual C++ Express Edition is one of the best values in development tools, particularly when combined with the Platform SDK. [...]