Yes, Generics are indeed kOOL. But just like anything else you have to understand the pain for the gain .
Collection classes without generics is sort of efficient, (until you pull a dog out of the hat rather than a rabbit ). Generics let you focus on your job. Yes. But at a cost which you have to understand.
You see, instantiation of these automagically created beasties might not be painful, unless you are a third party tools/library developer. Consider - your latest and greatest library is shipping to millions. It uses the latest whizzy templates (generics). Oops.
It has to instantiate every possibility - go look at the nastiness in GCC or other compilers before you commit to using Generics - or better still, go look at Python and give up on strong typing. I say this as someone like Anders from the M2 school of thinking.
Along the way I've ditched strong typing in favour of strong design philosophy. Automatic compilation has made us all lax. We shouldn't forget that at the end of the day a tool is only as useful as the girl wielding it...
I'm pleased to see templates. I want them (but like all things in moderation).
One of the most serious issues for .net (as a philosophy and metaphor for the future of microsoft's core OS's) is that GC originated on environments which are mostly classic workstation "pre PCs" like the Xerox Dorado etc. with Smalltalk, and Symbolics style
Lisp machines. Now on these, you have one Ego (Highlander style) which owns everything. You have One True Environment (EMACS style - sorry RMS). But, Win64 means Terabytes of memory and potentially 100k processes. 10k of those at least will be managed
app domains. Who wins? Can there only be One? My own view is that just as we have evolved to a stage in software design where we no longer expect language (syntax) to be separate from implementation (semantics) we have to make design and other constraints
which say that "in order to be a good citizen you can't assume that your contract with GC is that it won't dump you - in other words don't keep transient state and any transient state is explicitly stated by you when you code (that requires a step backwards
a bit like the old handle based mem alloc but if everyone cooperates then it works). I guess right now I think that Win64 really means truly awesome games UT2010 style which will want 100TB HD, 64GB memory and run managed (but who can tell??). In my own (fantasies)
I'm sticking with the old Boehms-Demer (who cares?) approach - GC is really controlled disorganization, not order.
I think that if Microsoft wants to get a handle on this they ought to talk to the CERN folks who have data management problems (including memory and processing requirements) from Hell - Terabytes are what pours in daily, and Petabytes are what have to be managed.
It won't be many weeks before the newest game
will have similar requirements
Bottom line: Compilers etc are just tools we use, not magic. If you want magic then you have to listen to other (smarter) engineers... DEK, RMS,ESR , Wirth , Anders and a cast of not so many. Today we have a luxury which we never had before - we can talk to
each other (and gee, it took forever in the past to build that kind of network).