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…
- 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.