What's new in C#, or who do you trust most?

Ted Neward has written a nice summary of the language innovations that we can expect be in C# 3.0. Obviously the success of various dynamic languages is having an impact -- all five of the features that Ted highlights have obvious (and simpler) analogs in dynamic languages.

The argument that I infer from Ted's piece is "Look! now we can have (some of) the expressiveness of dynamic languages with (most of) the safety of a statically typed language." Let me be clear that this is a good thing -- I am always looking for ways to be more expressive in statically typed languages.

But just because C# now looks a little more like some dynamic languages, don't make the mistake of assuming that two worlds are converging. In the most important ways, they are as different as ever. Here's why: Languages like C# "bake in" specific and detailed rules for inheritance, encapsulation, delegation, how symbols are interpreted, etc. In dynamic languages, similar rules exist, but they are not part of the language core. Instead, they are idiomatic extensions built within the language itself. Development teams can follow these idiomatic rules. Or, they can build (and enforce!) their own rules, specifically tailored to their needs. This has huge implications for productivity. In dynamic languages, you get to build the language up toward your domain, while you build the solution down.

So why has the static/dynamic debate staggered on for so long? I think we could get closer to some answers with better choice of terms. "Static" vs. "dynamic" is highly misleading. I propose we use a new set of names: vendor-oriented vs. developer-oriented programming, or VOP vs. DOP.

So who do you trust most: vendors or developers?