In .NET 3, WF had a custom syntax that was kind of like C# but kind of like VB in order to do expressions in rules. We heard a fair amount of feedback that folks wanted a richer expression story in order to have richer databinding, as opposed to the property + collection indexer support we had in 3.0. In 3.0, for instance, if I have a WriteLine activity, and I want to combine two variables, I can not via data binding. In 4.0, I can simply write Var1.PropOfInterest + " " + Var2.OtherPropOfInterest as the property value.
We knew we didn't want to keep pushing forward with a weird pseudo-syntax and wanted to align with all of the features available in various languages. We've built the system in such a way that we will be able to plug in additonal languages in the future. It just happens that the VB team is ahead of the C# team in being able to support this scenario, right now. Check out the "Future of C#" and "Future of VB" talks from PDC. The compiler services that Anders talks about at the end of his talk are something we'll need to incorporate C# into the WF expression story, and as Paul Vick mentions in his presentation towards the end, the VB team is making this type of funcitonality available in .NET 4.0.
Given that we don't have the capability to use C# today, we made the choice to push ahead and use VB here in order to provide a rich expression authoring experience (intellisense, etc) within the designer. Would you prefer that 4.0 ship with the 3.0 syntax / capabilities and push off being able to use richer expressions until we can land both VB and C# at the same time? The feedback we've gotten generally is that while this isn't ideal, it's a worthwhile tradeoff in order to get richer expressions.
In an ideal world, what would you like to see from expressions in WF?
- Just C#
- Just VB
- VB, C#
- Any language that I can run in VS?
- New language?
- Process / document centric expressions (XLANG/s, BPEL, XQuery ) ?