<story><title>New Features in C# 7.0</title><url>https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/</url></story><parent_chain><item><author>ZeroClickOk</author><text>What I love in C# is, each update the language gets even faster, far more natural to write. Soo different of Javascript, where looks you are fighting against the language first, and then if you win, can develop something useful. I use js why I need use it, but I hope use c# instead, high hopes with webassembly, etc</text></item></parent_chain><comment><author>pmarreck</author><text>&amp;gt; Out variables&lt;p&gt;This is pretty much a terrible language design idea. (Not the &amp;quot;out int x&amp;quot; change, but the whole idea of &amp;quot;out&amp;quot; in an argument list to begin with to indicate values coming &lt;i&gt;out&lt;/i&gt; via &lt;i&gt;the arguments&lt;/i&gt;.)&lt;p&gt;The path out of mutable argument bug-hell is &lt;i&gt;not&lt;/i&gt; to declare that the values of some argument variables &lt;i&gt;will intentionally&lt;/i&gt; get changed by the function in the scope where it is called. It is to make arguments immutable (like they are in the traditional mathy definition of &amp;quot;function&amp;quot;), &lt;i&gt;period,&lt;/i&gt; and allow multiple assignment to the function call. What I mean is that, conceptually, ideally, values and state should &lt;i&gt;only flow into the function arguments&lt;/i&gt; and &lt;i&gt;only back out of the function call itself.&lt;/i&gt;&lt;p&gt;So for example instead of&lt;p&gt;&amp;gt; p.GetCoordinates(out int x, out int y);&lt;p&gt;I think the following would lead to reduced cognitive load and thus fewer bugs:&lt;p&gt;&amp;gt; int x, int y = p.GetCoordinates;&lt;p&gt;or even better (color me biased by Erlang&amp;#x2F;Elixir):&lt;p&gt;&amp;gt; {x, y} = p.GetCoordinates; # as a pattern match&lt;p&gt;Instead of a smoothly mentally-traceable flow of values into function arguments and out of function returns, we have this monstrosity of conflating mutable arguments (where values go in &lt;i&gt;and then come back out changed in the scope of the function call&lt;/i&gt;) with this &amp;quot;out int x&amp;quot; business which seems to be indicating it intends to &amp;quot;push values upstream&amp;quot;, as it were.</text></comment>
<story><title>New Features in C# 7.0</title><url>https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/</url></story><parent_chain><item><author>ZeroClickOk</author><text>What I love in C# is, each update the language gets even faster, far more natural to write. Soo different of Javascript, where looks you are fighting against the language first, and then if you win, can develop something useful. I use js why I need use it, but I hope use c# instead, high hopes with webassembly, etc</text></item></parent_chain><comment><author>jfroma</author><text>I worked for 6 years on C#, I was C# MVP and I really enjoyed the language.&lt;p&gt;4 years ago I started to work more with js and then node.js until I stopped working on c#. Js has been for me a gateway to transition to other languages and get paid for that. I learned bash, python, a bit of ruby, go, etc.&lt;p&gt;If I see c# code today I don&amp;#x27;t understand what it does. Sure every version has a lot of new very useful stuff but it also introduces noise, &amp;quot;why he used out x instead of the new shiny out var x, he might not know about it, lets send PR&amp;quot;.&lt;p&gt;Along the way I have learned to appreciate simpler languages that does not change that often. Where there are few or just one way to do something.&lt;p&gt;I think I read an interview to Mitchel Hashimoto (hashicorp) and he said he choose Go over all languages because it was boring.&lt;p&gt;A boring and simple language allows you to focus on the problem you are solving. A language that doesn&amp;#x27;t change for years allows people to catch up and master the tool. It also means that you can open a file written by someone else years ago and understand what it does.&lt;p&gt;IMHO js was in that sweet spot until ES6.</text></comment>