Inside Visual Studio 2008
mlimber writes "Dr Dobb's Journal has a peek at what is new in Microsoft's Visual Studio 2008. Most of the features discussed in the article are related to .NET, web development, and the IDE itself. However, Herb Sutter, Microsoft software architect and chair of the ISO C++ Standards committee, blogged about some developments on the C++ front. This includes a significantly enhanced MFC for GUI building, and the inclusion of TR1 (library extensions published by the C++ standards committee, most of which have also been incorporated into the next C++ standard)."
All I could say is that the best tool for windows development just got better. The new feature that could impact my work most is LINQ. I dunno but the VS Team of M$ had been doing some good things...
Do they actually have C99 support yet?
Fuck, yes.
C++ sucks. It's a half-assed attempt at an object-oriented language, combining the easy memory model of C with the simple OO model of Simula. I used to think the only good thing about C++ was templates. Then I figured out that templates suck, too, because they're damned near impossible to debug, for most non-trivial bugs.
I fuckin' *hate* C++. I'd much rather have to code straight C while being punched repeatedly by a baboon.
Objective-C is much less ugly. But then, so is LISP. (Actually, LISP is a damned good language. It's just not *pretty*, in a strictly aesthetic sense.)
So, to not be snide, there are *many* people who still code in C. There are many objective reasons to avoid C++. (This *was* about C++, wasn't it?)
Microsoft is to software what Budweiser is to beer.
Back in 1998 I would have welcomed a standard compliant C++ compiler from Microsoft. What Microsoft did support, it supported one level deep (e.g. namespaces, many template features) with unbridled hypocrisy.
Fast forward to 2008, if Microsoft can't be bothered, others can, so now they bother. Kind of like arriving at a New Year's party at half past twelve. The champagne is gone, and when you make your grand entrance into the room full of glassy expressions, everyone slaps you on the back and says "hey, glad you could make it". Almost like being there.
Well, we're just completing the porting of approx 1 million lines of VC++6 to VS 2008, and I have to say it's been so worth it. The new compiler picks up on and warns about many more potential problems, and there's also the issue of whole program optimisation. Also the debugger in VS2008 is much better than the VC6.0 one. I have to say, I think VS2008 is pretty great. A lot of the niggly little problems in VS2005 have now been dealt with, and speaking as someone who is just now starting to write some C# after 9 years writing C++ the LINQ stuff and lambda expressions are just great.
You can't win Darth. If you mod me down, I shall become more powerful than you could possibly imagine
Have you tried MSVC++ 2005?
.net extensions are optional. And, in my opinion, crap. If you want to use .net, you're better off with C#.
.exe; and that it supports building .exes that run on Windows 95.
The debugger is leaps and bounds ahead of the VC6 one.
It supports parallel building of multiple projects on multicore cpus / multiple cpus (massively reducing build time).
Built in x86-64 compiling / debugging (local machine and network) support.
It supports link-time code generation (a major optimization improvement). The Pro version also supports profile-guided optimization.
It supports OpenMP multithreading extensions for C++.
Many many other improvements.
The C++
Note: VC++ 2005 Express Edition (the free version) doesn't come with the Windows Platform SDK, and if you don't install it is only good for developing C++.net apps.
The ONLY advantages to VC6 are: that it links programs against the VC6 runtime dll, which comes with most versions of Windows, right back to some 9x editions, where with VC2005 it links against the VC8 runtime dll, which most people need to install / you need to distribute it with your program / you need to static link with it, resulting in a larger
Basically VC6's only advantage is that it's old.
What do they mean?
Do they mean, perhaps, that widgets are now normal objects? no double-creation (first new Object, then object->CreateWindow).
Could they mean that all widgets are destroyed in the same way? no object->DestroyWindow for some widgets, delete object for some other widgets?
How about some serious memory management using shared pointers? no temp CBrush objects etc.
How about layout management? all serious widget toolkits have that. It's 2008, we should not have to position widgets manually.
What about the tab widget? in MFC, the tab widget is not a real widget: you have to manually hide and show controls upon tab click.
What about the model-view-controller pattern? this is 2008, should I still manually copy edited data from widgets to the data model of my application? most other toolkits support the MVC pattern. Dialog Data eXchange is a joke, of course.
How about the issue of message maps? Qt proves you don't need stinkin' message maps, which are hard to maintain, difficult to understand, and dangerous because casting is untyped and done through macros.
How about MIME type support?
These, and a lot more, are the issues that have driven developers away from MFC to Qt or WxWidgets. I have been maintaining a line of products based on MFC for the last 10 years, but this year I've decided I had enough: all the products are to be rewritten with Qt/WxWidgets. I will only approach MFC if it will approach Qt/WxWidgets quality.
Why, righ here, of course.
Just for the record, I think LINQ is a neat idea, and as a general principle I'm all in favour of strong abstractions and useful syntactic sugar in programming languages if these make code easier to understand and quicker to develop.
However, I'm worried by a lot of the hype about LINQ that's been flying around in recent months. Earlier this week, I found a code sample in a blog post showing how to use LINQ to find all the items less than 10 in a list. It went something like this:
from n in mylist
where (n => n < 10)
select (n => n)
For reference, here's the equivalent expression in Haskell:
filter (<10) mylist
That's obviously a much more elegant representation of the idea, and while it's not as generic, you also have things like map and reduce available, and a lot more if you need it.
If you don't like the functional syntax, Python's list comprehensions also provide a bit of flexibility, with less redundant clutter than the LINQ:
[n for n in mylist if n < 10]
Even using the standard library algorithms in C++98 — where, let's face it, the use of iterators and of algorithms with predicates is pretty unwieldy in the absence of good syntactic sugar — the code is about the same size as the LINQ version:
find_if(mylist.begin(), mylist.end(), bind2nd(less<int>(), 10))
This isn't intended to be a criticism of LINQ, because LINQ can do far more than just a simple filter operation on a single list. Rather, I am criticising those who over-hype a new technology as if it is the One True Way to solve all remotely related programming problems, and then apply a powerful, generic approach to a simple problem giving a ludicrously over-engineered result. See also: design patterns, template metaprogramming in C++, dynamically typed languages and web frameworks, monads for trivial I/O in Haskell, etc. Like all these other things, LINQ has a lot of potential to improve development when used in the right context, but I fear it will be overused just because it's new and heavily hyped.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.