The Future of C#

Sign in to queue

Description

Since Roslyn shipped last year we’ve been hard at work building on it to improve tooling, add new language features and enhance Roslyn itself. In this session Dustin and Mads will play with fire, showing early versions of new C# 7 language features such as tuples and pattern matching, new editor features like code style and source generators, and much more.

For more information, check out this course on Microsoft Virtual Academy:

Day:

2

Session Type:

Breakout

Code:

B889

Room:

Marriott Salon 9

Embed

Download

Download this episode

Download captions

For more information, check out this course on Microsoft Virtual Academy:

The Discussion

  • User profile image
    AnilApex

    Please add new C# features in Unity Game Engine.

  • User profile image
    Ultrahead

    What happened to the requested feature of Enum contraints for Generics? (already present in F#)

  • User profile image
    conmeobeo

    @AnilApex:It depend on Unity, not microsoft. Unity's .NET engine was outdated

  • User profile image
    bondsbw

    Is this going to be part of the live broadcast?  It overlaps other talks on the main page.

  • User profile image
    Florian S

    It seems they threw this out from the live broadcast schedule... sorry, but this really sucks! The interviews with Seth are less important than this one IMHO. BAD DECISION!

  • User profile image
    bkboggy

    ... very upset.  I set aside some time in my day to get the news on C# development... they had time for other nonsense that one cared about, yet they could not cover something incredibly important to a great portion of the community?

  • User profile image
    digiduck

    Is there a story around the Roslyn code analysis (and now code generating!) NuGet packages being supported by Visual Studio Code? Wondering if there is a future there or if this is a feature that is very much tied to Visual Studio.

  • User profile image
    dcampbell

    @digiduck -- yup! We'll be working on that.

  • User profile image
    Grauenwolf

    Can we please have inline XML like VB? That's a huge advantage for us who are still working on enterprise platforms.

     

  • User profile image
    topksharma

    How do I enable all the features shown by Mads in VS15 Preview ?

  • User profile image
    yep

    @topskarma

    http://www.strathweb.com/2016/03/enabling-c-7-features-in-visual-studio-15-preview/

  • User profile image
    yep

    @bkboggy: Which feature are you talking about?

  • User profile image
    FrankXuLei

    Thanks for your Presentaion.

    When will you finish the work of native compilation  of all  .NET ?

  • User profile image
    Stilgar

    Obviously sbyte is in C# for interop with the popular but low quality language called Java that does not even have unsigned byte.

  • User profile image
    aronmek

    I was hoping to see better type inference especially now with tuple return values.

    Is it still going to make it into C# 7?

  • User profile image
    Andrew

    I have used "sbyte" FYI. I'm glad its their ;)

  • User profile image
    Phylos

    What will the C# team do when they run out of features to copy from F#? It's easy for them to copy F# features because it provides a fully tested .NET implementation of many ML language features. Had there not been such an implementation so readily available, these features would have taken many more years to appear in C#.

    As more and more ML-like language features are added, C# starts looking like a poor man's F#.

  • User profile image
    Mineshr

    @Phylos
    >C# starts looking like a poor man's F#.

    No, that's only the part you understand of C#. C# 7 can be used a 'poor man's F#' by an F# developer, but C# also has tons of features -that enhance both performance and code quality- that are a pain to emulate in F#.

    There's nothing wrong with seeing how things work out in other languages, and primarily borrowing features that have already proven to work, before accidentally polluting your language with things that don't. Enriching C# was part of the reason why MS started funding F#'s development in the first place.

    However, I don't feel like C# 7 has been so much more influenced by F# than earlier versions. Pattern matching and tuples are hardly F# (or even ML) exclusives. Actually, back in the .NET 4.0 days, when the old Tuples were added, they were heavily influenced by F#, part of the reason they were made reference types (a pretty clear mistake in retrospect) is that F# tuples are reference types and it makes interop between C# and F# easier.

  • User profile image
    Yuri

    sbyte IS useful to match java or C signed char.

  • User profile image
    mfraiss

    @AnilApex:

    The new features of C# have nothing to do with Unity itself. Unity is supported by the .NET Framework and if you use C#, u will be able to use the new features in future automatically ;)

    Greetings!

  • User profile image
    galenus

    Any chance for a 'switch' to return value, like in proper functional languages? Or, I don't know, to introduce something new like 'rswitch' or whatever?
    And what about exhaustive pattern matching? Like some clever compiler trick for specific types...

  • User profile image
    jcdev

    Time: 0:33:55
    Try always false "pred" and have a IndexOutOfRange
    we love c#7, but also love perfect code.. like:

    static int FindLast(int[] list, Func<int, bool> pred)
    {
    int i;
    for (i = list.Length - 1; i >= 0 && !pred(list[i]); i--);
    return i;
    }

    include -1 return


  • User profile image
    yep

    @jcdev: returning -1 isn't feasible (possible) for the final version, as they're going to return a ref to an element of the array. Torgersen did mention "So if I go over the edge it's gonna go over the edge and throw and exception. Who cares. ... It's DEMO code!". Throwing an exception is still the best of the straightforward ways to handle overflow there (another way would be returning a value that can signal the lack of matches, but it doesn't look so straightforward for "ref int" returns?), best he could do is throw one that more obviously tells the user that no element matched their predicate. The code he wrote is also faster than yours (for use cases where the predicate will always match at least one element). Not saying it that speed difference would matter at all in more than 0.00000001% of use cases.

  • User profile image
    Vincent

    All of that looks nice, except one small thing: TOO LATE. 14 years are too much to jump on a scene and show new focuses - there is enormous amount of code already written using BCL, so nobody will change his code and (more important) nobody will change BCL (to accept "modern" features and change API).
    And what's double disappoints that C# team invented practically nothing - all "new features" exist TENS of years in another languages! Multiple returns, return reference, pattern matching, local functions, interpolating strings... what a rocket science here to realize that all of it MUST HAVE features for production language?

    (about thinking "To implement or not") Scratching head once is a wisdom. Scratching head twice is a slowpoke. Scratching 14 years... name yourself.

  • User profile image
    jcdev

    @yep: i understand your point, but, a code that throw exception for a search is a ugly thing for me, the correct behavior must be the ability to return a "pointer Zero", like others languages.... if i need a "try catch" for code like the DEMO then i prefer to return an index.

  • User profile image
    jcdev

    @Vincent: It's true that all this things existed years ago, but not exist one language that include all feature. Of course is my personal opinion, i feel excited when my prefered programing language is improved. How know.. maybe C# will be the first language that have all of this wonderful things that exist 10 years ago..

  • User profile image
    asik

    @Mineshr "C# also has tons of features -that enhance both performance and code quality- that are a pain to emulate in F#." - Could you give an example?

  • User profile image
    Yep

    @Vincent: As jcdev mentioned, I’m curious,
    First question: Which language had named/typed-tuples, ref returns, pattern matching, local functions, string interpolation (and linq, async methods, extension methods etc. and an IDE with top-notch editing, autocompletion and debugging support) 14 years ago?
    Second question: Which one beside C# has them today?

    @jcdev: I think the current proposal for ref returns is primarily intended for situations where you can expect to receive a valid ‘address’. If you can’t, you’re probably better off using traditional methods at this point. https://github.com/dotnet/roslyn/issues/118

  • User profile image
    AndyC

    Insanely cool stuff, really love where C# is going. And I say that as one of those who still has to work on not terribly well written VB6 applications much of the time.

  • User profile image
    bsubra

    Excellent stuff

  • User profile image
    Mineshr

    @asik Stronger inheritance (ability to implement 2 instances of the same generic interface with different type parameters), support for implicit conversions, far more convenient handling of pointers (try to declare/use a pointer to the address of an array in F#), unrestricted ordering of definitions (far better for prototyping). A few of the things C# has over F#. Not to mention features like the VS debugger's ability to interpret C# expressions (in C# if you want to get the value of an expression during debugging, you just highlight and pull it over to the watch window).

  • User profile image
    callout

    Except for ref returns, all features are pretty handy and some what 'about time' for C#.

  • User profile image
    PSudd

    I miss covariance the most from F#, but that's because I abuse it in C#, they work so neatly combined with extension methods.

  • User profile image
    jbeck1csg0

    Oh boy, I wanted to use that "NotifyPropertyChanged" thing on another project.  It was for a universal Web Form element.  It would also have gone greatly with that switch statement that has types:

    switch(x)

      case int i: ...

      case object [] l:

    That's cool!

  • User profile image
    Yep

    @galenus: I have played around with pattern matching in the VS 15 Preview, and according to my experience, when you want to pattern match for a return value you use the match statement. You should use the switch statement when you want to pattern match for side effects. Is there a scenario where the match doesn't satisfy you but switch with a return value would?
    'let x = y match (...)' is basically 'let x = rswitch(y) {...}', with a bit cleaner syntax due to the lack of support for fall-throughs.

    https://github.com/dotnet/roslyn/blob/features/patterns/docs/features/patterns.md

  • User profile image
    Abhimanyu​Aryan

    Yes I have same opinions. I see Java dying.......

  • User profile image
    Craig Owsen

    Although you are providing clever C# syntax for functional concepts (e.g. matching), you should also provide alternative functional syntax. There were several references in the video to Javascript; Javascript (i.e. ES6) is providing functional syntax to some of their new functional enhancements.

Add Your 2 Cents