Share via


What if we gave you $100 to spend? [Krzysztof Cwalina]

The BCL team is starting to plan our next release. Is there any base API that if you’d heard we were working on you’d say “I can’t wait to get the next version of the Framework”? Any basic data structures? Any Win32 functionality that we don’t currently expose in the Framework and you can’t live without? Any APIs that other frameworks have and you miss them in the .NET Framework?

Tell us how you would distribute hypothetical $100 to fund the features. For example, this is what I would do if my car manufacturer asked me this question:

  1. The ability to wirelessly upload music to the car’s stereo system ($60)
  2. More torque ($30)
  3. Beep when I lock the car ($5)
  4. Larger trunk ($5)

Comments

  • Anonymous
    April 05, 2006
    I'd love a good generic collection that I can use to derive my own custom collection implementations from. The current System.Collections.ObjectModel.Collection<> lacks several important functions such as sorting and single entry point adds and deletes (to verify non null entries or to set ownership for example).

  • Anonymous
    April 05, 2006
    How about unloadable dlls... I know you can kludge it by using appdomains, but why can't a dll "garbage collector" be created. After you unload a dll, the "garbage collector" will unload it as soon as no more objects created from classes in it loaded. Of course there is the can of worms about subsequently trying to create an class from an unloaded dll... Still, handling it is no different than what people are doing with appdomains today...

  • Anonymous
    April 05, 2006
    I would pay the entire $100 to get a GetDeclaredInterfaces function that would only returned interfaces specifically declared on a type.

    public interface IService {}

    public interface IUserInterface: IService {}

    internal UserInterfaceImplementation: IUserInterface {}

    ...

    type.GetDeclaredIntefaces() would return only IUserInterface rather than type.GetInterfaces() which returns both IService and IUserInterface.

    -- Robert

  • Anonymous
    April 05, 2006
    $10 "first-class" xs:YearMonth and xs:Date types with XmlConvert support
    $25 TimeZone support for DateTime behaviour: conversion, ToString(), numeric (+01:00) and named TimeZones (GMT / Z)
    $10 Support for BCE dates (remove internal reliance on TickCount??)
    $35 Complete exposure of the remaining NLS API capabilities via System.Globalization
    $20 Exposure of some Windows localization resources (e.g. "Help" for menus, etc)

  • Anonymous
    April 05, 2006
    The comment has been removed

  • Anonymous
    April 05, 2006
    Oh, and I forgot...

    $0 Fix TypeConverter.IsValid to actually work as documented [see: http://lab.msdn.microsoft.com/ProductFeedback/viewfeedback.aspx?feedbackid=9810731d-021a-4de1-90aa-24fdc0d259b4 ]

    $0 Fix Framework use of CurrentUICulture (where it should be CurrentCulture). [see: http://lab.msdn.microsoft.com/ProductFeedback/viewfeedback.aspx?feedbackid=b0e0eff7-7ab6-4b82-ba84-e3a181a884ef ]

    $0 Fix System.Web.Caching.CacheSingle's TrimLock bug [see: http://lab.msdn.microsoft.com/ProductFeedback/viewfeedback.aspx?feedbackid=64a8cd76-0d1b-4c50-9cbc-1894fde44a4f ]

    These are bugs, trivial to fix and shouldn't cost me anything! The first two are serious lapses in the correctness of BCL, and the last one is just silly.

  • Anonymous
    April 05, 2006
    Sounds like you are scrumming..

  • Anonymous
    April 05, 2006
    This is more of a C# thing than the BCL, but it would REALLY rock to be able [when desired] pass a struct by-reference to operator +=, -=, *=, /=, %=.  This would make matrix operations much cheaper to implement!

    [see http://blogs.extremeoptimization.com/jeffrey/archive/2005/02/19/153.aspx ]

  • Anonymous
    April 05, 2006
    $100 for adding a switch that makes all framework classes use CultureInfo.InvariantCulture by default.

    Currently if you miss a function you could for example write incorrect data to files (hidden bug). If it were the other way around you'd still have a bug but it would be more visible on the UI and not cause faulty data.

  • Anonymous
    April 05, 2006
    The comment has been removed

  • Anonymous
    April 05, 2006
    The comment has been removed

  • Anonymous
    April 05, 2006
    Re indexable collections and slicing: meant to link to http://blogs.msdn.com/kfarmer/archive/2006/04/01/566466.aspx

  • Anonymous
    April 05, 2006
    $70: More collections!
    (Start with PowerCollections and C5 as a baseline. At least include the basics: sets, binary trees, etc.)

    $20: Complex number support
    (Needs to interop well with base numeric types; add appropriate support in System.Math)

    $10: Better use of generics where useful (Enum.Parse<T>, WeakReference<T> etc.)

    And please pass on the following requests (I'm on my knees begging!) to the CLR & C# teams.

    -Generic operator overloading
    -Covariant return types (including out parameters)

  • Anonymous
    April 05, 2006
    10: Rationals

    You'd of course need the means to reduce them to avoid over/underflows.  But a buddy just suggested you could just wrap everything in a checked and do the reduction in the case of an exception -- this could happen automatically.  Exposing prime factorization for the numbers would be good as well.

  • Anonymous
    April 05, 2006
    re: Rationals.

    You can get a pretty strong implementation from the CodeProject stuff I contributed on here:

    http://www.codeproject.com/csharp/Fractiion.asp

    I've got a slightly improved version I can blog about if anyone is interested which uses Generics to get even clearer.

  • Anonymous
    April 05, 2006
    Add a StringComparison parameter to the Contains and Replace methods of the String class.

    http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=d29f8c78-e244-4489-abf9-b05f916bee2d

    I'm sure there are other useful suggestions for you on Ladybug that have been lurking there unlooked at for months.

  • Anonymous
    April 05, 2006
    Not sure if this comes under the heading of BCL but I'd split it between fixing the GDI+ "dancing characters" bug and fixing GDI+ drawing rectangles with missing corner pixels. It's a pain to have to P/Invoke down to straight GDI just to draw text.

  • Anonymous
    April 06, 2006
    Memory mapped files (80$)
    Basic functions to handle reading and writing big endian values for binary data sources generated from somewhere else (20$)


  • Anonymous
    April 07, 2006
    I would like to thank all who provided comments. Many of the comments validate planing work we have done, and many provide good feedback for us to adjust our plans. We will keep you posted (on this blog) about more details of the upcomming features as we start to design and implement them.

    Thanks!!!

  • Anonymous
    April 07, 2006
    memory mapped streams ... $50

    more more more datastructures. a non-standard generics collection impl with virtual in case you're willing to give up the performance penalty would be nifty ... $50

  • Anonymous
    April 07, 2006
    $80 for better DateTime types, that are nullable.  
    $10 make the windows DateTimePicker control nullable.
    $10 make the DateTimePicker able to handle dates prior to 1/1/1753!!

  • Anonymous
    April 07, 2006
    I'm not a fan of nullable values (I much prefer the NullableObject pattern).  What would be excellent would be for DateTime.MinValue and DateTime.MaxValue to be recognised as-such and handled correctly on the UI and database binding edges.  I had to add that support to Wilson's O/R Mapper, and to my ASP.Net controls.  It wasn't hard, but it sure seems like redundant work that everyone would have to do. If the database providers and the UI elements all handled things consistantly, I wouldn't have had to waste the time.

    BTW, the whole nullable object pattern with DateTimes lets me ask for live people the simple query:

     SELECT Person.ID
     WHERE GetDate() BETWEEN Person.DateOfBirth AND Person.DateOfDeath

    all I have to do is insure that my business logic uses DateTime.MinValue for "unknown" birthdates and DateTime.MaxValue for "unknown" date-of-death.  This beats the heck out of nullable dates anytime!

  • Anonymous
    April 07, 2006
    $20 for standard XML namespaces and schemas like the other Keith suggested.

    $30 for more generics constraints.  I want to be able to write generic (int, float,double) math libraries.

    $10 big endian support in BitConverter and BinaryReader/Writer.

    $40 to provide a mechanism to automatically determine/document as many possible exceptions that can be thrown by a method. I'm not asking for "enforced" checked exceptions just help in determining what could be thrown by a method.  It helps to anticipate how you might recover or if you can recover.

  • Anonymous
    April 08, 2006
    $100 - A decent DDE module in the framework.
    (I do not use .net, but when I looked at it earlier I could not find a DDE library. I do not know how much had since changed. Excuse my lack of knowledge, but I hope my investment is still valid)

  • Anonymous
    April 08, 2006
    The comment has been removed

  • Anonymous
    April 09, 2006
    $90 for object obj = X.Evaluate("2 + 3 * 4 > 5");
    $10 for Win32 ScrollWindowEx

  • Anonymous
    April 09, 2006
    $100 just to remove sealed keyword from Graphics class and make its methods virtual (or replace Graphics with IGraphics)

  • Anonymous
    April 10, 2006
    33$ generic arithmetic.
    33$ A non Direct X Math Library with Vectors and Matrixes.
    33$ support for generics in the soap serializer.
    1$ make generic constraints propagated so you don’t have to keep restating them.

  • Anonymous
    April 11, 2006
    I wonder if this falls under what some calls a generic operator overloading but it's going to help a lot if we can dynamically check during runtime if a type supports the "+", "-", "*", "/" and other operators on the primitive types (http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=331902&SiteID=1).

    Thanks very much.

  • Anonymous
    April 17, 2006
    As a relatively new blogger, I am still learning what are good topics to blog. One of the metric I used...

  • Anonymous
    April 18, 2006
    Today, I learned an intersting (and very important) lesson about building a framework. I was in a meeting...

  • Anonymous
    April 19, 2006
    What I would like is more CLR related than BCL but nontheless

    20$ Generics : Operator constraints
    40$ Generics : Templated Inheritance
    10$ Vector Math lib (non DirectX)
    30$ Remove sealed keyword from System.Data clases

  • Anonymous
    April 23, 2006
    Well, I'll put my 100$ on making the System.IO Namespace, especially the Reader/Writer Classes Cleaner.

  • Anonymous
    April 27, 2006
    The comment has been removed

  • Anonymous
    February 25, 2008
    I've had this come up in conversations in the past (and it's been on feedback for almost 3 years now

  • Anonymous
    February 25, 2008
    I&#39;ve had this come up in conversations in the past (and it&#39;s been on feedback for almost 3 years

  • Anonymous
    May 29, 2009
    PingBack from http://paidsurveyshub.info/story.php?title=bcl-team-blog-what-if-we-gave-you-100-to-spend-krzysztof-cwalina