The future:

.NET 4.0 gave unto us the second revision of the F# language, and the Async and Await keywords. These are extremely cool, and I have had a great deal of fun writing seemingly-synchronous code (e.g. a character generation module for a MUD) that turns out to be asynchronous with the right words in the right places. Marvelous, great job, etc.

F# didn't begin existing at this point, but it basically did for me. F# is open source as heck, so it has a bit of the cool factor, and it really is just another take on OCaml. Unfortunately F# 'objects' (things, I mean) aren't real .NET objects, but you can explicitly write real .NET objects within the language with only slightly more verbose syntax and going the other way is really easy.

F# is a lot of fun and a real functional language. If you haven't tried it, you really should. Async and await are amazing here too.

Also gave us the .NET Framework 4 vs. .NET Framework 4 Client Profile as distinct framework targets. Clearly the latter is a cut-down version of the former, except that there's almost no difference in the available functionality, and the downloads for both runtimes are almost the same. Hm. Mono ignores the distinction completely, and I think we should too.

Whatever. Clearly C# is a labor of love, and we are going to get all the features we can ever pretend to understand over the coming years. I look forward to the eventual relaxing of having to put startup code in void main instead of just loose in the file (maybe), the IDE having more understanding of code (even if .NET intellisense in VS blows the C++ version out of the water and, indeed, at least three levels of atmosphere), and (optimistically) a more coherent F#.

.NET 4.0/4.5 has a bunch of features I can't even remember right now, and I look forward to learning more about the language, even if Littlecurrency politics seem to currently neglect .NET for C++ and Javascript in Metro apps a bit. (WinRT is a really cool framework though.) C'mon, only C++ apps allowed to use Direct3D? What year is this?

I'm still going to keep using C#, and I'm not the only one. (I use other languages too. Doesn't everyone? Go rules, Ruby has some very exciting ideas, and I wrote a node.js app the other day that to my surprise wasn't actually a piece of shit. So that's nice.)

I think that 'a slightly better Java than Java' is an idea that will prove promising for years to come.

A little about Mono:

Mono is a great platform, for what it's worth. With their new garbage collector (that can be tuned!), almost complete* support for the latest .NET 4.5 feature set, and their own additional features (tasklets and SIMD instructions, a REPL, and Compiler as a Service, anyone?) on top, I think it's pretty cool, and you might, too.

At the risk of preemptively lowering the tone - the current discussion here isn't that bad - the current best defense of Mono is an old Jo Shields rant at http://apebox.org/wordpress/rants/124/, though its tone is a little inflammatory at the start.

To summarize: Mono is independent from Microsoft, covered by the Open Invention Network re. patents, is a free implementation of an international standard by a convicted monopolist (a la the entire GNU system for UNIX) and is actually quite awesome in its own right. It's not just a compatibility framework. It isn't 100% compatible with the .NET Framework, and it doesn't need to be.

* Mono doesn't support WPF.