
C# 7 Work List of Features - rajeemcariazo
https://github.com/dotnet/roslyn/issues/2136
======
cies
Wow.. This "Strong interest list" is awesome:

* Tuples (Proposal: #347)

* Pattern matching (Proposal: #206)

* Records / algebraic data types (Proposal: #206)

* Nullability tracking (Proposal: #227)

* Async streams and disposal (Proposals: #114, #261)

They seem to be really useful for a "more-functional style" of programming.

When comparing these ambitions and the level of transparency to Java's
ambitions & transparency, then it seems that C# is (or has) overtaking Java.
Combine that to the fact that dotnet is now an opensource project, and MS
seems to be more "open" nowadays then Oracle has ever been: I'm stoked about
this news.

~~~
reactor
I've been using Java for almost 6 years mainly with IntelliJ and I've heard
many times that C# is better than Java. Recently I've got chance to work with
C# (on Visual Studio 2012 with Resharper). Oh boy, I don't know how to express
my feeling, but in one sentence "It's just suck to the core".

I completely agree, as a language C# is more rounded, but as far as the
ecosystem and tooling concerned its literally nowhere near to Java.

~~~
rjbwork
That's funny to me because my experience was the exact opposite. After an
undergrad experience of Java, C, C++, Python (at least from the OO/C-likes) on
*nix systems, trying C# 5 w/ VS2010 + ReSharper was some kind of transcendent
experience.

I LOVE the language and I've found the entire ecosystem fine. There are some
corner cases for some more advanced systems level stuff, but I've yet to be
unable to do something I needed to.

Java feels like a clunky dinosaur to me now. But hey, different strokes for
different folks.

~~~
ChristianGeek
I have a similar background and my experience was the same.

------
octo_t
The fact that this is so out in the open on Github is pretty amazing - shows
how much Microsoft is changing.

Can you imagine the feature list of C# 1.0 being discussed like this?

~~~
cies
Yups. They day I read their massive open source release announcements I knew
that MS is from now on not the same company it was.

Mahatma Gandhi supposedly said: "First they ignore you, then they laugh at
you, then they fight you, then you win." Which I think is very applicable to
MS attitude to open source.

Now they have a new attitude: If you can't beat'm, join'm.

~~~
LLWM
First they ignore you, then they laugh at you, then they fight you, then they
embrace you, then they extend you, then they extinguish you.

~~~
jongalloway2
That'll be quite a trick with an MIT license, community promise on patents,
and published language specs.

------
orf
Improved tuple support would be awesome, it's something I often miss when
working with C# and coming from a Python background (that along with a nicer
dictionary syntax). The nullability tracking proposal also looks interesting.

Overall looks like C# 7 is going to be awesome even if only a few of these get
implemented.

~~~
thecopy
Agreed! I really like the idea of symmetry when calling a method. I have never
gotten why we can send multiple values in, but only one value out. And
polluting the source code with structs for every method which needs to return
two or more values is ugly.

~~~
cltsang
Well, that's what out and ref parameters are for

~~~
cpfohl
Except out and ref parameters are exactly zero fun to use. Wheras returning
two values is a lot of fun, esp. with pattern matching.

~~~
yoklov
This is somewhat subjective...

I'm not sure I find either more fun than the other.

~~~
cpfohl
You are _absolutely_ correct. Perhaps fun is the wrong word. It is however, a
royal pain to use the first, and way less so to use the second...That's
something I feel I could probably defend in an objective sense.

------
pointernil
Nice.

At what point would it make more sense to just leave c# as it is and move on
to a new "language"?

I like all the changes and more importantly I guess I actually understand the
intention and the need for them, at same time I'd like to question how all
those actually fit into one language...

I understand MS has a very strong record for support of legacy software,
systems etc. So for sure on point would be to still "support" legacy C# code
and allow for more modern paradimes in the same language, but given all the
other .net languages and the interoperability provided: what is the drive
behind pulling it all in into C#?

~~~
MichaelGG
They're far too heavily invested in C#, and good alternatives, like F#, are
viewed as too difficult for the majority of their customer base to deal with.

They can add these features, let less ... able ... customers argue over "var"
and what they'll use, while pleasing other users. C#'s seriously annoying to
code in due to it's statement-oriented nature and lack of basic features.

Additionally, because libraries take dependencies on C# compiler
implementation details, other languages do not interop as seamlessly as the
.NET/CLR concept would have us believe. Looking at things like the precise
output of lambda expressions, or all these APIs that take object, then read
the properties as an argument list (which should just take a list of tuples
instead).

Also, just imagine the fallout of "Microsoft abandons main .NET language!"

~~~
mattmanser
Seriously annoying? If you don't like it, don't use it and comment on other
things. There's plenty of people that think it's one of the best languages
available today.

~~~
MichaelGG
Yes, it is very annoying. It's overly verbose for no good reason. Well, if you
count internal compiler complexity a good reason (that's why fields don't have
type inference according to Eric Lippert, though they still haven't fixed up
that inconsistency in Rosyln it seems).

Plenty of people think C++ is a good idea for common apps. Plenty of people
think node and JS are awesome. Plenty of people loved Flash. What's your
point?

Because C# is so popular (like JS), its questionable decisions ripple all over
and affect people even if they aren't directly using C#.

------
sker
Man these guys don't stop. They haven't even released C# 6 and now we're
discussing 7.

With the "strong interest" features and type providers, is there any reason
left to use F#?

Also, I don't see why array slicing would require CLR support. That would be a
welcome addition.

~~~
M8
I would only use F# if I already knew it. Otherwise it just doesn't give any
killer features anymore to justify the effort needed to learn it. I don't
consider things like no nulls and default immutability a killer feature. Also
there is just a handful of F# jobs and they don't offer an outstanding salary
for knowing F#.

~~~
kirse
F# async and parallel programming (Async.parallel, Agents/Mailboxes,
Array.parallel.map, etc) are vastly superior to C# right now. Every latest C#
iteration has repeatedly borrowed everything great from F#, that should be a
sign alone that F# has tons of killer features (and continues to be ahead of
the curve).

I picked up F# in about 3 months by reading a few books, then refactoring a C#
library into F# (this taught me a lot of the interop quirks), and then doing a
full project in as much of the F# idiomatic way as possible.

As far as jobs, I don't know anyone who uses the .NET stack that considers
themselves strictly an "X" programmer. I've never used VB on a project, but
I'd be pretty confident I could consult on a large VB project based on how
much C# I've written. Mixed projects are really the best of both worlds
anyway, learning F# will improve your C# simply because it teaches you new
ways of reasoning about your domain.

If C# 7 ends up implementing Tuples, pattern matching, ADTs, etc... those are
all bread-and-butter of F#, might as well learn how to use them ahead of time.

~~~
M8
Parallel.x is already implemented in C#, I don't care who had it first.
Akka.NET covers the actor model (note that Mailboxes do not support
distributed scenarios). Those are not killer features (at least anymore).

I already improved my C# by reading about F#, there is nothing magical about
deconstructible tuples, pattern matching and ADTs that needs too much time to
learn. It's the rest of the "succinct" ML syntax that puts me off. That and
lack of ReSharper.

------
jtreminio
If I wanted to learn C#, not knowing any other compiled languages (but knowing
PHP), where would I start? Another gotcha: I'm on OSX, and would prefer to
learn C# from the standpoint of CLI first, then GUI components.

~~~
WDCDev
You have a couple options:

1) Code up some simple C# code in a text editor (sublime) and then compile it
using the mono c# compiler.

2) Run Windows on Parallels and download visual studio community edition.

Folks are working on a CLR that will run on Darwin and the core framework as
well as an alternative to Mono. This won't be released until later this year
though, and tooling is still TBD.

~~~
josteink
Sublime? Parralells?

Why not just Monodevelop[1] instead? It's an open-source .NET IDE. Although
not on par with Visual Studio, I doubt anyone would expect that anytime soon.

For a beginner it will probably be very relieving having Intellisense and
code-completion, not to mention it will encourage exploration of the APIs in a
much more playful manner than trying to read MSDN docs.

If you're going to start getting into C#, don't start with your hands tied
behind your back. Get the full package!

[1] [http://www.monodevelop.com/](http://www.monodevelop.com/)

------
TazeTSchnitzel
The one thing that worries me about the tuples proposal is it would be
confused with System.Tuple. The proposal seems similar to Python's namedtuple,
so if possible, perhaps they could add some new .NET type (System.NamedTuple?)
and use that?

------
guiomie
Not sure to get the Tuple (#347) ... Why not use an anonymous type or the
already existing Tuple class ?

~~~
louthy
Anonymous types can't be returned from a method. Well, they can, but not with
any kind of safety (casting to object, or dynamic). Using tuples is all about
representing a type by its 'shape', not its name. With anonymous types there's
no shape declaration; but I could imagine that it would be useful for C# to
allow implicit casting of anonymouse types to tuples (where the shapes are
equal).

------
DonnyV
The great thing about .NET is that it has a ton of great features but never
feels overwhelming or slow.

------
ExpiredLink
More features == better language. A tried and proven strategy.

~~~
aeonsky
Are you willing to say the same for C++?

~~~
pjmlp
Yes.

Most of the C++ warts are caused by the need to be copy-paste compatible with
C, expectations of C developers being lured into this new language and be a
drop-in compatible replacement for C tooling.

"The Design and Evolution of C++", [http://www.amazon.com/The-Design-
Evolution-Bjarne-Stroustrup...](http://www.amazon.com/The-Design-Evolution-
Bjarne-Stroustrup/dp/0201543303)

~~~
aeonsky
If the entire C++ codebase I worked with was mostly C, my job would be so much
easier. I think the 2000+ page C++ manual proves my point.

