Book of the Runtime – Internals of the .Net Runtime not in the documentation
hanselman.com
hanselman.com
Then I think about the massive compatibility matrix between the different versions of the different sub-fameworks, the confusing core vs non-core naming and versioning conventions, the new language syntax features that are available through nuget packages only, etc. I can't help thinking that the .net team has lost its way, and needs to have a hard think about how to keep all of that simple.
Keeping it simple is what has made the success of competing languages like python.
Which features?
The new tuple syntax in C#7 required the addition lf the ValueTuple class in the framework, but as framework and compiler versions are released independently it has to go into one first. This means people can upgrade their compiler to C#7, and install the ValueTuple nuget package and get the benefit of the new langauge feature without having to move their entire project to require the latest version of the .net framework. I believe the next version of the framework will include ValueTuple by default and the package will no longer be required.
Although at least in this case it will return to being simple at the next release.
But I do see your point, .net has certainly grown in complexity since the early days.
For example, Perl 5 only has barebones support for OOP, and the community developed various approaches to fuller support. It was kind of like the way we've had multiple Javascript frameworks trying out various approaches to MVC. Eventually, Moose[1] was developed and became the most popular approach, and my understanding is that it greatly influenced the core support for OOP in Perl 6.
If you look at the docs for Moose, a lot of the syntax which looks like core language keywords is actually made of functions defined in the module.
This approach is great for letting the community of language users figure out what works and what's needed in the language, so that the language can evolve naturally instead of being designed by a detached committee. Again, it's much like the way Javascript is evolving, where the core language has been picking up features that were originally developed as add-on libraries.
Rewriting framework and standard libraries — I’m sure that will be nice after a while, but I’ll sit this transitional phase out.
Apparently Xamarin.Forms alongside XAML Standard is going to be the UI story for .NET Core, as communicated at .NET Conf 2017 sessions.
I do have an ongoing WinForms project, but only because it integrates with an application that was initially developed for Windows XP.
XAML designers, specially Blend, are much more powerful than the WinForms one.
Dropping elements from the toolbox into the form, setting properties and code-behind event handlers.
No difference here, there is no need for MVVM over-engineering if the requirements are basic as you say.
With the advantage that XAML layouts are much easier to work with than TableLayoutPanel.
Yeah it's great improvement to have it nicely typed, but keep it static, I don't want to be DI-ing everything, especially when I'm just throwing together a prototype.
I want easy to use, not dogmatic adherence to ideals that gain you absolutely nothing but a confusing mental model in something like semi-permanent config.
ODataControllers are some of the most painfully bad things I have ever had the displeasure of programming with, I'm migrating our code bade back over to using API controllers with the semi-broken OData plugins rather than use them.
Admittedly part of that is because OData is great for plugging into grids like datatables for jquery or kendo grid, but otherwise incredibly over-complicated.
It sometimes feels as if they can't make their mind up about anything, and yet invest heavily in the latest fad that disappears a year later.
Surprised they've not released an update yet that forces everyone to use yarn instead of nuget.
Web forms are from 2002. It‘s ancient by today’s standard, much older than e.g. facebook or youtube.
It's harder than that.
If you come to the Python mailing list, you'll notice that we get heated debates about:
- rejecting awesome features;
- allowing very complex use cases;
- integrating radically different paradigms;
All that while keeping in mind the general look and feel of the language should not change.
Honestly the python-idea mailing list is a land field because of this, and an exhausting place to contribute, but the result is amazing.
It's why we have the type hints the way they are: most people can completely ignore them. You can even provide them using comments, or in separate files. Checking types is done with an external program or your IDE. They are completly non intrusive.
This way Python remains Python, but you can scale up to full type checking when you need to.
This is a damn hard balance to find for a language born in 1995 with millions of users including sysadmin, data scientists, web devs and geographers.
It seems like every couple of years they decide to try to carve out a common subset of all the different frameworks, and have that be the real Core Standard Portable .Net Framework, but it never quite catches on and they end up with just yet another variant to support.
The languages are great (both C# and F#), the runtime is great, the compiler and debugger are great, but the SDK versioning is a total mess and the package manager (NuGet) is pretty bad too.
(Sounds like this book covers the bits that are great)
Have you had a chance to try Paket? It's meant to have overcome the common issues with NuGet, as well as provide new features that NuGet doesn't provide: