What would you like to know about "how we do language design for VB and C#" ?

On June 6th I’ll be speaking at the Norway Developer Conference in Oslo, on the subject “How we do language design at Microsoft (VB/C#)”. It will cover topics like how we designed Async, how we run our week-to-week language design process, where we get ideas from, how we recognize and respond to user requests and market needs, and some of our attitudes towards what a language should be.

Afterwards, I’ll put the slides up here on this blog.


QUESTION: Are there any areas that you’d like to see discussed? Any questions you’d like answered? If you post questions or topics here as comments on this blog, then I’ll take two weeks to think them over, and I’ll incorporate the answers into my slides.


Disclaimer: The talk and slides will come solely from my personal experience from the past few years in my job as language PM — learning the ropes, working with the other language designers, running the VB language design meetings, and working as a VB/C# compiler developer. They certainly won’t be Official Microsoft Statements on the subject “How Language Design Must Be Done”.


Comments (12)

  1. Jon Skeet says:

    Annoying, I won't be at NDC this year. However, I'd love to hear your thoughts on how you balance a design which may take a while to understand to start with, but is ultimately clean, vs something which is simple to get started with, but may be restrictive later on.

    This isn't so much on how you balance "experienced developers" vs "novice developers" (although that's part of it) – it's how you balance "first day vs third year" experience with a particular feature.

  2. To overload a single comparision operator, involves overload to operators. The one you wan t to overload eg ">" but also its complement "<=". What's the rationale behind that decision? not to allow those operators to be overloaded individually.

    Also on Operators, why no support for custom operators?

    In F# you can define a Recursive Iterator which has a single yield statemente, to do the same in vb11's iterator. See example (http://www.dreamincode.net/…/snippet6577.htm)

    Involves enumerating through the result returned by the recursive call and yielding each item. (Lines: 32 – 36) Wouldn't this pattern suggest a "Yields" or "Yield All" keyword or an attribute eg "<System.Runtime.CompilerServices.RecursiveYield()>". On which the compiler can act on and rewrite the method to flatten/ SelectMany the results of the recursive call.

  3. fatcathu says:

    Design mistakes and short sighted decisions are interesting,

    for example, you broke the backward compatibility to fix the iterator lifting problem of lambdas in VS2012,

    and IIRC VB11 implemented Yield better than C#, simply because you did it later than C#.

    do you think these kinds of problems will eventually kill a language ?

    at what point you think we will need a fresh start ?

  4. fatcathu says:

    another one, how does the language teams interact with the runtime teams, library teams and operating system teams ?

    for example, you get rid of the baggage of XP with 4.5, obviously you will target more modern platforms in the future, how will the capabilities of underlying platforms impact the language design ? IIRC you mentioned the hight price of threads etc in the past talk of this topic, and Google Go implemented their 'goroutines' in userspace, with stack growing etc, that's an interesting topic.

  5. ljw1004 says:

    Hey everyone — thanks for the interesting questions!

  6. Chuck says:

    If all .Net Languages are the same then why IL Code is not the same?

  7. Jon Pawley says:

    Safe travels, Lu, although I presume you are in Norway already by now. You should aim for a conference in New Zealand 😉

  8. Corby says:

    I do not know who to forward this request to, but I think String.IsNullOrEmpty should be renamed to String.Exists, much shorter,

  9. fatcathu says:

    FYI, the video is here http://vimeo.com/43549129

  10. All I care is that you guys don't start treating us like the Java designers, where you barricade us from certain patterns because "you don't think it's appropriate for us" as opposed to what is possible. Nobody knows what new discoveries may emerge; after all, async/await came right out of Richter's crazy AsyncEnumerator.

    And Corby, I just use a custom IsNullOrEmpty(this string str) extension for very clean code, you could rename yours whatever you want. I assume it gets inlined anyway.

    I would like to know why there's no ??= or a custom += for efficient adding to large collections, but I digress.

  11. ADI says:

    i want to ask something,

    why vb.net exe file is always bigger than c# exe file.

    for example

    in my machine, an empty win forms app with one forms size 24 KB exe file for vb.net dan just only size 7 KB for c# one.

    why ? can i get an explanation ? thanks. (maybe i can receive the answer in my e-mail : adi4vista@gmail.com)

  12. Lucian, I think you may have misunderstood the recursive yield example. It can be linearised if you could some how reference the Yield machinery. See Example: http://www.dreamincode.net/…/entry-4167-concept-recursive-yield-on-to-a-common-channel