Visual Studio has supported test-driven development for years, but it was always awkward to create new stubs and to synchronize IntelliSense if you actually wrote the tests first. Now you can switch into consume-first mode to keep IntelliSense from running amok, and you can generate stubs from their usage.

.Net languages

The Visual Basic and C# languages have both evolved in nice ways and nearly achieved feature parity. Visual Basic now has lambda expressions and implicit line continuations; C# now has simplified COM calling and dynamic language support. Both have a new feature called type equivalence that simplifies deployment against different versions of an assembly, which is especially useful when trying to program against the Microsoft Office APIs. (Lambda expressions are anonymous inline functions or methods; in the .Net Framework they are used as a concise way to define delegates, and they're very useful when writing LINQ queries.)

F# is a functional programming language based on ML and OCAML, which uses the .Net Framework and interoperates with other .Net languages. F# was previously a research project; it's very nice to see it as part of Visual Studio 2010.

[ Microsoft Visual Studio 2008 was the InfoWorld Test Center's pick for Best IDE of 2008. See the rest of the 2009 Technology of the Year Award winners. ]

One of my constant annoyances with Visual Studio 2008 has been its half-baked JavaScript parsing and IntelliSense. More times than I could count, it "helpfully" completed my code with irrelevant nonsense. Microsoft calls the VS2010 version "dramatically improved" and "2 to 5 times faster." That isn't actually saying much, considering how bad IntelliSense for JavaScript was before, but the improvement is certainly welcome, and in fact the JavaScript support is pretty good.

When working with big Visual C++ projects, I used to dread making changes to core header files; it would nearly always force me to take a break while the IDE caught up. The IDE is now smarter about parsing files in the background.

The VS2010 C++ compiler now supports the lambda expressions, rvalue references, compile-time assertions, expression type discovery, and automatic type deduction features of the C++0x standard. Another piece of good news is that the VS2010 C++ compiler has a mode that is backward-compatible with the Visual Studio 2008 tools and libraries. This will make it easier for individual developers to upgrade even if the rest of the team doesn't want to switch over.