Hacker News new | ask | show | jobs
by BoorishBears 2114 days ago
C# doesn't follow fashion either, it does things that actually work before the dust settles on them.

I think you'll find many people outside the HN crowd also appreciate their approach over trying to appease the kinds of customer needs that involve keeping 25 year old binary only jars running.

To me .NET Core is a shining example of that

3 comments

> over trying to appease the kinds of customer needs that involve keeping 25 year old binary only jars running

C# doesn’t break too many things while it evolves. Example: https://docs.microsoft.com/en-us/dotnet/api/system.collectio... That class was introduced in .NET 1.1 way before generic, still present in the most recent .NET Core 3.1.

They sometimes deprecate higher-level stuff, but very conservatively so. E.g. asp.net web forms (2002) is deprecated, while windows forms (also 2002) is still supported.

Try to run random .NET Framework Assemblies on .NET Core or .NET Native, this is what Java philosophy tries to avoid.

Forms designer is still broken on .NET 5, and it might not make it to the final release.

This is a single breaking jump after 20 years. This migration is really needed and well considered.
.NET Core has been so good managed, that I a project back in the .NET Core 2.0 days to port an application to Java, because the customer wanted to move the application to UNIX (not just Linux flavours), and not all necessary features could be done in Core.

To this day there are plenty of libraries that are yet to run on either Core or outside UNIX.

Plus not everyone is happy how the whole Core, .NET 5, .NET Native, Reunion, UWP, CoreRT, Xamarin, MAUI, Blazor is being managed.

A language alone isn't enough.

I mean .NET Core is targeting Linux, is that really a sign of mismanagement?

And to your second point.. I mean you're comparing concepts at very different levels of a stack. Your list includes a language runtime, a web framework, an OS specific application format/framework?

It's like saying "Java, HotspotVM, JavaFX, Tomcat, Android APK, Vert.X"...

In reality it's ".NET Core and .NET Framework".

And while there have been some growing pains as the term .NET became overloaded, it's always been clear .NET Core is where they want people to be, .NET Framework exists because migration to a new platform wasn't going to happen overnight.

Every year there's more and more .NET Core compatibility, they've done a good job with .NET Core so more people are willing to use it (and port packages to it)

https://docs.microsoft.com/en-us/dotnet/standard/choosing-co...

Naturally I am comparing all levels of the stack, as I mention on my comment a language alone is useless.

Yes, the future is .NET Core, however pretending that outside Windows it can match Java offerings just reveals a complete lack of knowledge of all kinds of platforms that have Java support available for them.

Guys like PTC, Aicas, Gemalto, microEJ doing embedded real time Java, selling M2M devices, IBM and Unisys mainframes, 80% of the mobile world (even if it is an adulterated flavour of coffee), smartcards, blue ray players, healthcare and TV settop boxes, kiosks and plenty of other use cases.

.NET is catching up with 25 years of Java doing cross platform development, while anything that came out of Redmond has been mostly Windows only for 20 years.

.NET Core only supports the three major mainstream OSes, zero support for anything else, and has the growing pains of a platform where plenty of third parties are yet to release anything on Core.

Sitecore just released their first version on .NET Core earlier this month, and I don't see anyone rushing to upgrade.

Doing WPF, Forms? Good luck with many GUI component libraries.

Apparently the designers are going to miss .NET 5 for full stability.

The beautiful thing with being a polyglot consultant is that I don't have to convince myself that I am using the best stuff as "Developer X", I just use whatever stack the customer asks for and then move on.

> Yes, the future is .NET Core, however pretending that outside Windows it can match Java offerings just reveals a complete lack of knowledge of all kinds of platforms that have Java support available for them.

I have no idea what on earth you're on about... you didn't bring up anything I didn't know as far as places where various JVMs live.

This just reads like another distraction from the topic of language direction just like your last comment trying to confuse web frameworks and language runtimes...

Why is .NET Core supposed to be blindly chase platform parity with JVM down, especially down to embedded devices?

You realize the JVMs used on embedded devices aren't the same ones used on desktop right?

Like there are C# frameworks for embedded development on microcontrollers, why on earth would that be .NET Core's domain? Do you think HotspotVM is running on those smartcard microcontrollers?

-

Your entire comment you seem to be under the impression .NET Core exists to be a drop-in replacement for the JVM for every usage.

Which is especially strange because you're using JVM as a generic term for every JVM in parts of your comment, which would maybe be comparable to the CLR at best (but still be an odd comparison to make)

If anything you're speaking to the strength of C# and a product like .NET Core, they're not chasing the same goals that skewered the development pace of Java.

The C# team is not worried that their language standard changes might be hard on people embedded runtimes in smart cards or 25 year old binary only jars

The same mentality is why C# paid the price to break backwards compatibility on generics back in the 2.0 days, and enjoyed a much more powerful implementation going forward in perpetuity.

You're free to feel one approach is better than the other, but it's non-sequitur at best (and disingenuous at worst) to start spouting off about how the JVM runs on smartcards and so that means .NET Core is supposed to be matching that in a conversation about language growth...

Sure it does, because what is relevant are ecosystems, not language grammars.

Yes, C# the language is better designed than Java the language, while .NET the ecosystem is is tiny spot of Java the ecosystem.

When I mention JVM, I mean any implementation, I don't mix Java with Hotspot.

And yes PTC and Aicas sell full Java SE compliant implementations for embedded development.

The only embedded options for .NET are Netduino, hardly market relevant, and Wilderness Labs, which doesn't cover at all the kind of industrial deployments PTC, Aicas, microEJ and Gemalto are doing.

I work with Java and .NET alongside each other since they exist, so I know pretty well the pros and cons of each platform, specifically outside the implementations that people mix with the language.

> .NET Core only supports the three major mainstream OSes, zero support for anything else

This is true, but this level is support for the majority of use cases. I do personally find it very annoying that refuse to support 32-bit Linux tho.

> has the growing pains of a platform where plenty of third parties are yet to release anything on Core

This was true a few years ago, but certainly isn't now. I honestly can't even remember when I last tried to use a library that didn't have dotnet Core support.

I can give you several examples, you can start with Sitecore and SharePoint.
I don't doubt there are examples, but they are surely in the minority nowadays.

Also worth noting that anything built for dotnet framework 4.6.2+ (4.6.2 was released in 2016) will run just fine under Core CLR.

C# has been moving much more quickly since then, async/await comes to mind as a feature that didn't work out
How did they not work out??
Mainly because its the colored function problem. You end up having to change the call stack all the way up to Task<T>. Once you start using them, everything is a Task.
Or polluting the code with a couple of Task.Run() to avoid having to do just that.