Monthly Archives: June 2007


In a context completely unrelated to computers or my work, someone gave me a copy of one of those “word a day” calendar entries for the word “mortmain”. You can see the fuller definition here, but one definition is:

The oppressive influence of past events or decisions.

Only after I tacked it up in my office did people start pointing out to me the irony.

What’s in VB 2008? What’s out?

As a medium of communication, blogs have their strengths and weaknesses. The informal nature of the communication makes it incredibly easy to communicate information on an ongoing basis. The down side, of course, is that the very informality of blogs can also trip you up if you don’t pay enough attention to follow up. I’ve certainly been guilty of that on this blog (there are still some loose ends I think haven’t really been tied up), and we’ve been guilty of that as a team.

One thing we haven’t always done a good job of is keeping people apprised of feature decisions that we’ve made as the VB 2008 product cycle has progressed. As a result, there has been some confusion as to what features are in and which features are out of the product. So let me start by giving a reasonably concise list of the feature set for VB 2008…

General features

  • Friend assemblies. We now pay attention to the InternalsVisibleTo attribute.
  • Relaxed delegates. As long as there is a way to map one delegate’s parameters to another, you can now convert freely between delegate types. (I’d wanted to see this extended into full delegate currying, but that will have to wait for a future release.)
  • Runtime agility. The ability to compile without a VB runtime, or targeting another VB runtime.
  • Calling Object members on interfaces. Minor feature, but useful in some situations.
  • Ternary operator. A short-circuiting conditional expression like C’s ?: operator.
  • Improved generic type inferencing. In VB 2005, we would not infer a type for a type parameter that had multiple inferred types (i.e. a parameter T matched two arguments typed as Integer and Long). In VB 2008, we will now pick the wider of the two types. (Actually, it’s more complex than this, but you get the idea.)


  • Local variable type inferencing.
  • Anonymous types.
  • Extension methods.
  • Nullable types.
  • Query expressions. This is the From…Where…Select… expression.
  • Object initializers. For VB 2008, we will only support initializing read-write fields of non-collection objects (more on this further down).
  • Expression trees.
  • Lambda expressions. For VB 2008, we will only support expressions in lambdas, not statements.
  • Partial methods.


  • XML literals.
  • XML members.
  • XML namespaces.

I think most everything on this list has so far been discussed, with the exception of the omissions from object initializers. Our original plans, going back to PDC05, included several more features for object initializers, such as being able to write to read-only properties, as well as collection and array initializers. In the end, the schedule for VS 2008 was not sufficient to implement these features with a high degree of confidence. Which unfortunately means that they will have to wait to a release beyond VS 2008.

It was 15 years ago today…

It’s hard to believe it, but 6/21/2007 marks the 15th anniversary of my permanent arrival in Seattle. I’d spent the summer before in Redmond interning, but in June of 1992, I graduated from college, bought a car, packed up my stuff, and headed out to Seattle. When people would ask me how long I expected to work at Microsoft, I said, “I don’t know… I guess I’ll stay three to five years and then figure out what I’m going to do with the rest of my life.” Tomorrow, of course, marks the 15th anniversary of starting work at Microsoft.

On the one hand, an incredible amount has changed at Microsoft and in my life since then. On the other hand, I’m still working with the person who had the office next to me when I joined. Life, I guess, is funny that way.