The increasing complexity of the .net framework and .net development tools steadily increases the barrier to market entry for software developers. Other disincentives: a lack of platform portability, a neglected JIT optimizer, quick obsolescence of knowledge
as new libraries are continuously churned out. C++ and Java JIT optimizers should not be faster than .net, and the .net framework doesn't need to be such a monster.
Speaking as a former unix developer, I originally switched to .net when it was released in order to spend less time debugging heap corruption and other low-level C++ problems. I thought .net would steadily increase in efficiency and simplicity, for example
by providing an equivalent to the STL. At this point .net doesn't have many advantages, except operating system market share.
There are some libraries where one just has to marvel. It is as if one is standing before a grandiose piece of architechture, full of patterns and symmetries. The .NET collections library probably isn't one of those libraries. The best type has to be IEnumerable,
the "workhorse of .NET" and the premier Linq enabler, besides IQueryable.
My own naïve view is that programming Linq to Objects is like treating memory like a database. It is such an important use-case with so far-reaching implications that it should be heavily optimized by the compiler, even if it has to be treated like a special-case.
Linq queries are superbly composable and are extremely easy to reason about and glue together.
One can have several regrets in retrospect about .NET but in actual fact, many regrets simply have to do with how Moore's law is realized now vs how it was realized in the past. It also has to do with a realization of how purity and a declarative style can
help improve software correctness.
Microsoft clearly has some massive internal efforts underway. The Phoenix Framework, the Bartok research compiler, the various research languages at MSR, The Singularity and Helios projects as well as the newer incubation project being lead by Joe Duffy,
also heavy on language research. But when following CS it's hard to ignore how many advances are continuously being made and how it would be nice to apply those advances. When do you decide you are far enough along? CS is still a young science and we are still
doomed to reinvent the wheel over and over again, in ever more clever ways.