Anders characterized C# 1.0 as getting something out there, 2.0 as being about Generics, 3.0 being about LINQ, and 4.0 being about Dynamic Programming. He addresses the zealots on both sides of the dynamic and static argument and states that both have benefits. There is a new keyword coming in 4.0 – dynamic. When you define a variable as dynamic any subsequent actions on that become dynamic actions. Making a method call involves a call through the DLR (I would assume) to dynamically dispatch to that method, property, etc… I love the way C# is going – we have the ability to leverage dynamic when needed, but within the static framework that so many of us are comfortable
Concurrency is the elephant in the room in programming today – Moore’s law will yield more cores, but not faster ones – there is no silver bullet here. It will take hard work in language design and I believe likely with developers as well to change our perspective and perhaps how we develop to adjust to the multi-core revolution. I wonder if things like Windows Workflow and Azure represent efforts in this space as they allow developers to plug into concurrency in a different way. As has been highlighted in an internal training class that I have been taking lately state is the killer to concurrency. The more state has to be maintained the harder a problem concurrency becomes.