What do you want in the next version of VS/C# (part 4)


Ok. I tabulated the vote that came in after I asked everyone to contribute. It took a lot longer than I expected since I got a total of 667 (aren’t I glad that isn’t 666) votes come in. Here are the final results. Of course, I can’t gaurantee anything based on this, but it is pretty fantastic information to hear about. Also, if you don’t see a certain option listed here feel free to ask why. The main reasons are that I might have felt it was subsumed by an existing item, it’s something we already have in VS2005, I didn’t understand what you were asking for (even after asking for clarification), or I just missed it :-). First off, here’s all the raw data:





















































































































































































Feature Votes Feature Votes
Edit&Continue 31 Better constraints for generics 10
Better support for nesting other languages in C# 23 Warnings for certain goto behavior 8
Better control over all code generation. 23 Better syntax for casting 8
handling of null events 22 Better mock object support 8
Tuples/Generic lists of variable length 22 Better thread debugging 8
Covariant return types 20 Delegates on properties 7
Expose the compiler with a managed API 19 Generate field/property/constructor/class/etc. 7
intellisense for indexers/conversions 18 Fix up usings 7
tell you when you’re using a disposable type unsafely 18 VI mode 6
Non-null types 17 Functions in module scope/Top level functions 6
C#=Vb 16 Better MSDN documentation 6
Error correction/spell checking 16 More flexible color schemes 6
Private backing store for properties 16 Better XML serializer 6
Automatic constructor stub generation: 15 Better support for chords/keybindings 6
Pre/postconditions 15 User filtered catch handlers 6
Static import of classes 14 Method scoped variables 6
support for checking enum values 14 VS macros in C# 5
const support 14 Find code duplication 5
Support for mixins 13 Read/Edit mode 5
Virtual operators/operators on interfaces/better operators 13 IntPtr operators 5
Nicer syntax for anonymous delegates 13 API For accesing the profiler from managed code 5
Expose the refactoring engine 12 No regions on interface implementation 5
inlined array syntax 12 Warnings for implicit vs explicit implementation 3
Managed Add-ins 12 Fix up doc comments when doing a refactoring 3
special constructs for asynchronous operation 12 Method virtual by default 3
Collapse all code comments 11 Support for method groups in doc comments 3
C-omega support 11 Expose formatting/colorization engine 3
Generic properties 11 Obfuscator Api 3
Attributes on local variables and code blocks 11 Simplified iterator syntax 3
Better control over completion list (sorting and filtering) 11 Schema for XML comments 3
First class generics 11 Global exception tracking 2
Better incremental find 10 More flexible interface implementation support 2
Better constraints for generics 10 Aspects 2


In a nicer graph form, I’ve split it up into the 50% that have the most votes and the 50% that have the least votes. note: I’m pretty sucky at creating graphs, so if you have a better way to do it, feel free to take the data and create your own. Send it to me and I’ll put it up with these :-)




One thing I learned: Never conduct a web poll by soliciting emails. It’s ridiculously time consuming to collect and tabulate all votes. It’s also error prone. I ended up printing out everything and checking things off one by one in order to make sure i didn’t miss any votes.


As part of the vote I asked people to tell me about things they didn’t want. I left out those results because there just weren’t many opposing votes. I’m guessing that that’s because, for the most part, everyone either wanted a feature or was just OK on it. The only features that really solicited any negative responses were some of the more controversial onces. Like E&C, C#=VB, virtual by default, and const support. However, there wasn’t (in my opinion) a significant negative view on these compared to the amount of positive/uncaring views on them.


Some things that suprised me about the results:


  • I wasn’t expecting “Better support for nesting other languages in C#” to be so popular. I’m guessing that people are using regex’s, SQL statements and XML a lot and would like that to be a nicer experience.
  • I didn’t realize how much people were annoyed with dealing with null events in C#. We didn’t do any work on this and I think that was a mistake given the simple things we could have done that would have made people happier here
  • There were a lot of responses that talked about the IDisposable pattern was extremely important and how it was so easy to mis/forget the pattern. People really, really, wanted IDE support here.
  • I was expecting more interest in “virtual by default”. That seems to be a very polarized issue that people have strong opinions on. I was surprised to get so few votes for it.
  • Very few people wanted a global exception handler (i.e. events whenever any exception was thrown/caught). I was expecting that to be more popular as well.


Thanks very much for letting us know about all of this. It’s going to be really helpful in our future choices for C#!!


Comments (43)

  1. Frans Bouma says:

    After playing with VS.NET C# Express 2005 abit, I find it very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very, did I mention very?, annoying that almost all dialogs of VS.NET are not RESIZEABLE.

    The dialogs are often very tiny, I’m on 1600×1200, I have to click and scroll and click and scroll just to see a single row in a dialog or check some option. Very very very, ok I start to repeat myself, you get the picture. :)

    IF this could be added to the final version, it would be great. Almost all developers I’ve spoken to about the C# Express product tell me the same.

  2. Frans: Please file these issues at:

    http://msdn.microsoft.com/ProductFeedback

    Please indicate which dialog you are referring to. A screen shot would also be helpful to show how bad it is.

    Shameless plug: the dialogs that the C# team is responsible for (not many) are all resizable :-)

  3. Frans Bouma says:

    Cyrus: ok, I’ve already filed 2 of them (options dialog and the Indexes/keys dialog of SqlExpress), I’ll file more of ’em. Thanks :)

  4. Daniel Jin says:

    "nesting other languages in C#"

    would that be nesting IL in C#?

  5. Daniel: Yes. IL nesting is just another non-c# language.

    Note: I would like to hear about what you would want to be doing with IL inlined in code.

  6. Whohoo! E&C and I bet you didn’t even count my repeated votes for it :)

    Seriously, give me that and I really like the spell checker idea for strings and labels and other text elements on WinForms/WebForms.

    Oh ya, and get rid of the 5 crashes of VS.net 2003 I’ve had this morning!

    Give me all of that, and I will come and kiss the entire VS.net dev team (and C# team too!) :)

  7. James: Did you submit your crashes to watson? :-)

  8. evil80 says:

    optionally to enable throws clause.

  9. Evil80: Could you explain what you mean by that?

  10. Daniel Jin says:

    > I would like to hear about what you would want to be doing with IL inlined in code.

    hmm…after thinking about this for the past 10 minutes, I honest cannot find a good thing I want to do with this other than the coolness factor. I guess IL will circumvent some restrictions c# has, like using operators in generics. (granted, it’s something you shouldn’t do) so cyrus, what cool stuff do you do with IL?

  11. I submit the crashes that actually produce an error that I can submit to Watson. But half the time (I’m running Windows XP SP1 + patches) VS.net just disappears and I get no error report window or anything (and yes, Win XP is set to prompt for the errors and send the error log)

  12. Daniel: Kind of need more than just "coolness factor" to consider this :-)

    Otherwise, it’s just much much easier to just write the IL in a separate file and link to it from your main program.

    I try to avoid IL myself :-)

  13. james: ooooh, that sucks. My guess would be some sort of stack overflow. Le me know if 2005 is having this problem. if so, then i can work with you to try and get a repro or a crash dump to send to us so we can squash the bug.

  14. I’m still waiting for my DVDs to arrive for Beta 1 (Yes, I’m one of the "official" beta testers :))

    As soon as I have it, and if I can convert our project to it now (finally!) then I’ll let you know if it crashes the same way!

    Thanks!

  15. Darren Oakey says:

    yeah – I’m waiting for my dvd’s too!

    (of course, I’m not one of the "official" testers <grin>

  16. Excellent work Cyrus. Thanks a lot

    Now the next question. WHEN !

    AFAIK mixins and inline IL are planned for Orcas, how about the others ?

  17. Panos: "AFAIK mixins and inline IL are planned for Orcas"

    Fascinating :-)

    Where did you hear that information?

  18. 1) Hejlsberg about generic-mixins

    http://wesnerm.blogs.com/net_undocumented/2004/01/multiple_inheri.html

    <quote>

    Anders Hejlsberg indicated during a PDC panel that, while MI support is not planned for a future version of .NET, the CLR team is looking at supporting mix-ins, which is a type of MI based on generics. Mix-ins provide a kind of implementation inheritance that interfaces currently lack

    </quote>

    Just to add to the above, if mixins allowed operators, then maybe, it could be the perfect constraint for a generic type, with the current implementation of generics, simple operations (+.-,/,*) are problematic and inefficient

    2) I was remembering wrong things, what its planned is not exactly "inline" and its not in Orcas, but in Whidbey

    Hejlsberg about inline IL

    http://msdn.microsoft.com/chats/vstudio/vstudio_032103.asp

    <quote>

    Can’t say that I’ve ever found much use for it [inline IL]-perhaps cause we don’t support it J Seriously, I think ILASM covers that just fine, and in Whidbey we’ll allow you to link C# and ILASM into a single assembly.

    </quote>

    How is that different, than using modules its beyond me

  19. Panos: Linking into the same assembly is far far off from supporting inline IL :-)

  20. Dr Pizza says:

    _Exactly_ identical featuresets across all the languages that ship with the IDE. It annoys me that though one has a /roughly/ consistent front-end to C++/VB.NET/C#/etc., there are different featuresets for all those languages. If C# has a given refactoring, VB and C++ should do so too. I know it’s hard to do for C++, but it’s not impossible.

    I want to be able to nest projects within folders within solutions.

  21. Cyrus : It’s still inlining, but at a higher level 😉

  22. Darren Oakey says:

    you mention that you were surprised no-one wants a global exception handler?

    Well – I for one don’t particularly care about that, because I can replace the default error handler, and really don’t want to interact with any exception that was successfully caught – it feels a little weird…

    However, what I would like (although maybe it’s possible? – dunno?) – I’m still using VS2003 officially at work, and so are using "using" to in a way simulate anonymous methods.

    For instance

    using (Transaction.Called("Create Cheque"))

    {



    Commit();

    }

    and of course, I rollback a current transaction if it is NOT committed when it is disposed. That works well, and a hashtable against threadid and stackframe accessed by CurrentTransaction allows me to nest these things and still remain threadsafe/eventsafe… but one thing I couldn’t figure out how to do at all was to tell whether my object was being disposed because the block had finished nicely, or because an exception had occurred. I tried searching the stackFrame, but the caller is the same regardless. If I could do that, I could get rid of the need for Commit!

    (Of course, with anon methods this desire goes away, I then just say InTransaction( "Create Cheque", {blah} ); )

  23. Kavan says:

    Is it possible to link IL and C# into the same assembly? Would that be possible with code from any language?

  24. Keith Hill says:

    Actually most of what was listed there I don’t want. I don’t want C# to become VB. If you want VB then just use VB. I wouldn’t mind EnC but I have certainly gotten by without it for many years. I would like to have Covariant return types (you are inching there with delegate covariance). I am baffled by the "want to embed other languages inside C#"? Is this the crowd that wants to write IL inside of their C# programs? Look, I’d be much happier with a VS supported solution where projects allowed a mixture of language files. Or a VS supported way to take two projects built as netmodules and then link them into a logical assembly. That would be a more robust solution IMO. And please, I never, ever want to see a WITH statement in C#.

    A global exception handler, specifically with the ability to generate managed minidumps would be AWESOME. We really want to get error reports from our deployed code, do the post-mortem debugging thing and improve the quality of our products.

    I would also be in favor of a property keyword that acted just like the event keyword. You place event keyword on a delegate field and it handles creating a backing delegate and the add/remove handlers. The property keyword would do the same thing with a field, creating a backing store field and the appropriate get/set methods unless readonly is specified and then only gen a getter method.

    Finally and this probably isn’t a C# thing but more of a CLR thing, this biggest improvement to .NET that you could make to help developers create more robust code is to give us a non-enforced form of checked exceptions. That is, I want to know (without a doubt) about all checked excpetions (this excludes fatal errors like OutOfMemory/EngineExecution/StackOverflow exceptions) that any particular method throws. I don’t need compiiler enforcement of catching or declaring a throws. I just want to know about all the exceptions. And don’t tell me to look at the docs. The docs just plain don’t document all the non-fatal exceptions that some of the framework type members throw. I trust 3rd party class library docs even less.

    In the end, you need to listen to your customers with a discerning ear. If you gave us everything we all wanted then C# would quickly become a bloated P.O.S. Please choose carefully what you add to the language. As long as Anders is over-seeing the C# I feel pretty confident he’ll keep changes in check. After having argued with him about certain additions to the language, it was clear the feature had to clear a pretty high bar of "additional value" before he would even consider it.

  25. Keith:

    "I am baffled by the "want to embed other languages inside C#"? "

    The previous posts went into this in much more detail. This was referring to the issues people deal with commonly when trying to embed domain specific langauges like regexps, sql, xml, with C#. Currently it’s a pain and it would be quite interesting if it could be done better.

    "If you gave us everything we all wanted then C# would quickly become a bloated P.O.S."

    Note: this was not a question of "what do you want to see in teh C# language" but what do you want to see in C# the whole shebang. So, if we could advance the editor into making it trivially easy to manipulate regexps from withing C#, then that would solve the problem.

    I’ll add your votes to the entire list :-)

    Oh, and I’m curious… would be enough to just say "every single method can throw these possible errors?" considering that the instant you perform any IL instruction you have the potential to OOM, Overflow, or EEE.

  26. Keith: " I am baffled by the "want to embed other languages inside C#"? "

    I highly recommend reading the earlier posts on this topic so that you understand what all the suggestions are :-)

  27. Keith Hill says:

    "Oh, and I’m curious… would be enough to just say every single method can throw these possible errors? considering that the instant you perform any IL instruction you have the potential to OOM, Overflow, or EEE."

    In Java there is a distinction between checked exceptions and non-checked runtime exceptions. The same could apply in this scenario. OOM, StackOverlow, EE exceptions, etc are all unpredictable. However if I write to a registry key that I don’t have permissions to write to, I’ll get a SecurityException. That is 100% predictable. I think of them in the old SEH terms of hardware exceptions are like runtime non-checked exceptions whereas checked exceptions are like SEH software exceptions. So no, I only want to know about the "predictable", checked exceptions.

    Sorry about jumping in this late. I just subscribed and my reader apparently didn’t pick up your original post on this subject.

  28. Haacked says:

    This is more of a VS.NET request than C#, but I want to be able to reference an exe in VS.NET. see (http://haacked.com/archive/2004/07/16/819.aspx)

  29. Haacked: You can now reference an exe in vs2005 :-)

  30. http://www.viagra4u.info

    Viagra, buy viagra, viagra online

    Order viagra, cheap viagra

  31. Joe Fuentes says:

    The text was good, but i stil cant find the play ipdates. looking for it dude.

  32. A heap of wheat, says the Song of Songs

    but I’ve never seen wheat in a pile :)

    did you like it?

  33. Nice one, but what about der weg ? anywya, congrats from me.