.NET/C# Generics History: Some Photos From Feb 1999


Over the years I’ve been fortunate enough to work on several different projects. F# is ongoing, has several different aspects (FP, OO, async, units-of-measure etc.) and quite high-visiblity, but perhaps the one that was most timely, most foundational, and most wide-reaching was .NET and C# Generics.

Here are some fun photos from the early history of .NET Generics at the Microsoft Cambridge Research Laboratory in Feb. 1999, in St Georges House, Cambridge UK. The photos were our record of a whiteboard discussion between myself, Cedric Fournet, Nick Benton and Simon Peyton Jones (and maybe some others?). We’d already discussed some of the ideas in Redmond, but it’s fun to have visuals like this and memories of the early days of the Cambridge lab and the adhoc meetings where we pursued our ideas. Some parts of the .NET generics design that were only implemented much later (“variance flags on type parameters”) are listed.

It was an amazing time, to land at Microsoft with such a great group of people, and at the start of such a great platform.

To write a full history of the project would take more time than I have here, though I hope to do it one day. But I do want to say one thing straight: Generics for .NET and C# in their current form almost didn’t happen: it was a very close call, and the feature almost didn’t make the cut for Whidbey (Visual Studio 2005). Features such as running CLR code on the database were given higher priority.

It was only through the total dedication of Microsoft Research, Cambridge during 1998-2004, to doing a complete, high quality implementation in both the CLR (including NGEN, debugging, JIT, AppDomains, concurrent loading and many other aspects), and the C# compiler, that the project proceeded. Product group resourcing for the feature was low until 2004, and remained sparse, leading to major overload on MSR Cambridge employees, though ultimately the code, designs and specifications were fully transferred into both the CLR and C#. Today, the future of the CLR is firmly in the hands of those in Redmond.

There were some particularly memorable personal moments:

  • missing my wife’s birthday in order to make a deadline for NGEN support for generics (she is very forgiving, please thank her if you ever meet her);
  • the memory of opening AppDomain.h and realizing the critical nature of the interaction that app domains pose to generics
  • making the first public presentation of the work at PLDI 2001
  • being told by product team members that “generics is for academics only”
  • Eric Rudder’s email of April 2002, saying “Just to close out on this thread from my mailbox, we will be doing c# generics for Whidbey, and the previous work will be very leveraged, so thank you”…. No. thank YOU, Eric 🙂

What would the cost of inaction have been? What would the cost of failure have been? No generics in C# 2.0? No LINQ in C# 3.0? No TPL in C# 4.0? No Async in C# 5.0? No F#? Ultimately, an erasure model of generics would have been adopted, as for Java, since the CLR team would never have pursued a in-the-VM generics design without external help.

The world is as it is today because we act when we have the chance to act, and because we invest in foundations that last the test of time. If you see a chance, take it.

A huge thank you to everyone who was involved in this work (especially, of course, Andrew Kennedy), and it still gives me a warm glow to look at a .NET, Silverlight or Mono exception stack trace and see some generics hidden in there 🙂

            

 

 

Comments (37)

  1. Neil Mitchell says:

    I had always assumed that generics was an obvious essential feature that was only skipped from .NET 1 due to insane time pressure (that was when trying the pre beta's of .NET 1). It's amazing to hear the reality, and I thank you for making C# immeasurably better than it would otherwise have been!

  2. Nick Palladinos says:

    I cannot believe this statement "generics is for academics only" What a narrow view!

    Thanks very much for sharing this story with us.

  3. Pop Catalin says:

    "generics is for academics only", This can't be true 🙂

    I've felth a dire need for generics since I've first got my hand on C# 1.0. I almost felth them comming. I think the C# team and the teams around it must have felth the same way!

    So, when's the next level of generics planned? Like class Foo<T>:T ? I've had a feature request for this on connect since 2006. It would make creating monads allot more easy.

    Catalin

  4. Having learned F#, never looking back … more people should know the history of generics, it allows a much better understanding and that's really what does the job.

    Another is the continuation monad, ya' gotta' get that one … the c++'ers even have a continuation method now with much under the covers.

    cheers, tom

  5. Isaac Abraham says:

    Wow. I had no idea. Whenever people talk about the history of .NET, they always talk about the main feature of .NET 2 having been generics. Amazing to find out that they were clearly not the first class citizen of the project plan. CLR on SQL is nice, but no way (IMHO) has it had anywhere near the impact that generics has had. Thank god that you are the other guys stuck with it to make sure it got in – you've got my gratitude at least.

  6. Jeroen Frijters says:

    Amazing. Thank you! And your wife 🙂

  7. Ben says:

    Wow!

    The sign of a brilliant invention is that it opens up new possibilities that the inventors didn't even imagine at the time.

  8. Ben Cooley says:

    Generics are one of the most often cited features that place the .NET framework technically above java.  And I would speculate that the feature was instrumental in proving that .NET was a serious focus for Microsoft, and not just a syntactically similar knockoff of Java as it had been portrayed when it was first released.

    It's probably under-appreciated as to how mind share is swayed by this sort of technical leadership.  A major aspect of platform evangelism is simply demonstrating your technical prowess in such a way that those who adopt your tech feel confident in the minds behind it.  I'm sure .NET on SQL sounded like a better use of resources at the time, but in retrospect, even without including the effect of follow on technologies such as LINQ, generics cemented the reputation of .NET and played a very large part in it's success alone.

  9. sathesh pandian says:

    The history showed your hard work and dedication. .Net developers around the world are enjoying their work with generic now. They are praising your work while they do coding.

  10. allende says:

    The "tweet this" button it doesn't work

  11. Hung says:

    Thank you!!!!! and all the best to your family and friends!

  12. Peter says:

    When's your wife's birthday? I'd like to send her flowers.

  13. Hashname says:

    I can't imaging a life without generics..Thank you for bestowing the goodness of generics on us.. 🙂

  14. Chris Ballard says:

    Thanks Don! I can't imagine day to day development without generics now, hard to believe we lived with .NET 1.0/1.1 for several years. A good indication of the huge value of the research done at MSR, thank god it isn't "just for academics"

  15. Fazal Ahmad says:

    .NET – you are blessed with Generics – Thanks Don!

  16. Sean Copenhaver says:

    Pretty amazing to read and I love the pictures. Generics are a pretty interesting feature, especially when you are playing around with Types (not the concept but the CLR object). They can be obscene to look at sometimes but would the adapters, interfaces, casting, etc been better?

    Would generics, as I know them from a C# perspective, be a side effect of explicit typing? I don't have much experience with F# (did a couple of Project Euler projects with it a few years ago), but I'm curious from the developer's point of view if implicit typing eases the generic/tag soup. I suppose the CLR needs to support them for many of the features we tack advantage of to exist these days.

  17. Englebart says:

    As a Java developer, I thank you…  If dotNET had omitted generics, then I am pretty certain that Java would have NEVER implemented them. Proof that competition works!

  18. Merikey MS says:

    Excellent article, even tho generics don't mean much to me (yet).   One question, didn't MS have a digital, save-able whiteboard in NetMeeting in 1999?   Just saying… 😉

  19. Hhrvoje says:

    Guy that told that generics is for academics only should be slapped. And fired.

    Thanx for pursuing and all the good work.

  20. Joseph Clark says:

    Thanks for posting this – a great read! Also thanks to you and all who contributed to making the CLR such a great development platform. In a company full of Java developers, I feel blessed to wave my Visual Studio stick around, to the envy of others. 🙂

  21. rjw says:

    Joe Clark : As a Scala/Java developer using IntelliJ –  can you keep your Visual Studio to yourself, its a bit embarrassing if you don't cover it up with a bit of Resharper 😉

    Having said that reified generics as the CLR has them is a major advantage of that platform. Java really screwed that one up. Its very annoying not being able to reflect on all generic types ( eg in scala pattern matches). Also, I'm not convinced that sufficient focus will ever be put on EA, fixnums, etc etc in the JVM to match the – theoretical – ease of getting better performance through fuller type information. I'll hang on to trove for now…

  22. Jonathan Dickinson says:

    I am probably the only dev who knows about this, but TSelf is amazing. It's probably something you never designed, but thanks to correct design it works.

  23. congratulations says:

    gracias por crear .NET . es lo mejor en el mundo de la programacion

  24. Art Scott says:

    Thanks Mrs. Syme. You've got a great guy there.

  25. Andrew Asare says:

    I second that call for the guy who said "generics is for academics only" being firmly and repeatedly slapped, before then being dropped from a great height, with a java book in his clasp! – Actually that person should be named and tattoed with a capital D too! Thank you Don and the team that delivered this essential feature – it would be good if a number of the loose ends could be tidied up though!

  26. Hashtable says:

    How many years did it take for Softies to implement generics? Why wasn't it in VB6? Generics were around for decades, since the '70s.

    > being told by product team members that "generics is for academics only"

    Haha.

  27. T.Terlemez says:

    Thanks a lot.

  28. Indy Lawi says:

    Thanks Don! My gratitude to you and your team for your dedication and hard work. IMHO .NET would not be such a compelling development platform w/out generics, LINQ, Async, and of course F#. My thanks to your wife too for her understanding when you were in the thick of things.

  29. Kean says:

    Thanks for all your gifts to the .NET community, and the personal commitment it took to deliver them.

    Looking forward to seeing you and your family back in CH, soon (let me know!).

  30. VietNT says:

    Thank you! And your wife : )

  31. Newton Sheikh says:

    Generics is fun. Thank you so much. Looking at white board was awesome.

  32. jack hu says:

    thanks for generic and thanks for a great advice for life!

    "….If you see a chance, take it."  

  33. mark vanzuela says:

    .Net would have not be that fun without generics and also F#. Thanks to you and your wife 🙂

    The world is as it is today because we act when we have the chance to act, and because we invest in foundations that last the test of time. If you see a chance, take it. – Don Syme, Microsoft research

  34. Pete Montgomery says:

    Wow. Thank you.

    I take it there's currently some comparable "big decision" to be made, and you're hoping for the right choice?

    Pete

  35. Mike Strobel says:

    Thanks for the fascinating read!  I never would have guessed that generics, easily one of the most important features in .NET 2.0 and onward, almost didn't make the cut.  I can't thank you and your colleagues enough for all the time and energy you channeled into making it happen.  Having worked with Java on the back-end for a recent project, I have a reaffirmed appreciation for reified generic types (and, consequently, the ability to bind type parameters to value types).  I think you have successfully demonstrated that generics aren't "just for academics(?!)".

  36. Judah Gabriel Himango says:

    Wow. Thank you for pushing so hard for generics. Thank you for this contribution. And thanks to your wife! 🙂

    Here's another innovation we'd be without had generics not made it:  Reactive Extensions, which is proving to be a unique innovation built atop generics and LINQ. msdn.microsoft.com/…/gg577609

  37. Nico says:

    Wow, the world would not be the same without generics (at least my programming world). Thanks for your dedication!