K. Scott Allen raises an interesting question when he asks “Where is C# in the Programming Language Lifecycle?”
The nearly 8 year production life of C# has been very interesting. As a former Java 1 / Java 2 developer I can honestly say that C# started out looking a lot like Java. However, it has evolved into its own over the years. Point in case: I recently wrote a framework that heavily leveraged the things introduced in .NET 2 and beyond (generics, lambdas, linq to objects, nullables, anonymous types, etc). Looking at the code, it barely resembles the C# we all wrote in the past and what the majority of C# coders are still writing. In fact it is rather illegible if you only know C# 1.x and semi-legible if you know C# 2.0. It seems that C# managed to become something else without bothering anyone who didn’t care to notice.
Although C# has successfully managed to be a shape-shifter in the ever evolving world of language trends, I think K. Scott Allen is onto something when he questions whether or not C# will continue to thrive in the multi-threaded / multi-CPU world. I have a hunch that C# may remain a first class language if the single threaded / parallel language interop pans out in an easy fashion. I think C# (and VB) will remain to be the best way to model a domain and perform OOP in the Microsoft world, but perhaps other languages will advance to be the main application control / host languages. If the interop story goes South, people will choose something else.
All that being said - how much change can a language go through before it falls under the weight of shims that allowed it to grow outside of its initial design? Eventually the need to implement a hot feature to keep the language popular could undermine the language. I do have to admit however, that the C# team seems to have managed to truly extend the language rather than shim it or fake it to get new features in. The way generics were introduced really allowed the 3.0 / 3.5 features to be added in a way that isn’t dissonant with the original base language. Anders and co. basically put in the the genetic possibility of growing another limb of indeterminate descent without disrupting the body.
So what is my answer to the original question? C# has definitely hit maturity. Based off of the trends I am seeing in online code samples and forum questions, I think C# as it was in .net 1.0/1.1 timeframe is on the verge of decay as 3.5# semantics are probably just past the adoption/acceptance stage.