Original Post
Microsoft has released some preliminary documentation for their plans for C# version 3.0 (if that link is stale, head over here and click the C#3.0 Language Specification link). The document starts right out talking about the goal of making C# capable of functional-style programming. Given the huge success of C# thus far (in terms of adoption rate), it's interesting to see this push. Personally I'm wondering if this might finally be the thing that gets awareness of functional programming "out there" to a large number of mainstream programmers. Of course, the counterargument is that programmers who aren't comfortable with the functional style may well just ignore those capabilities of the language, and go on writing imperative code - as they say, you can write FORTRAN in any language. In any case there are a lot of really cool things in the pipe here. Anonymous delegates have already gone a long way towards getting lambda-function capabilities into the hands of The Masses, and now C# 3.0 will provide full-blown lambda expressions complete with some basic type inference capabilities. And speaking of types, "C# Orcas" (as the 3.0 revision is code-named) will feature anonymous types and implicitly typed arrays, via the "var" keyword. The cream of the crop though comes towards the end of the document, in the section "26.8 Expression Trees." Anyone with Lisp familiarity will immediately recognize the impact of this statement: "Expression trees permit lambda expressions to be represented as data structures instead of executable code." Gee, I wonder why that sounds familiar [grin] All in all this is a pretty exciting trend; it shows that Microsoft is pretty serious about adding some powerful high-level features to C#. Again, given C#'s noteworthy adoption rate, it seems like there's a good chance that this will lead to a more widespread familiarity with "advanced" language features that functional programmers have been enjoying for years (OK, decades, to please the smug Lisp weenies among us [wink]). What's everyone's take on this direction? Good/bad? Is there a real chance of this raising the bar a bit on the language features that the "average programmer" is competent in using? Or will this simply accentuate the gap between programmers who use such features, and those who don't?