Announcing .NET Core 1.1 Preview 1
blogs.msdn.microsoft.com
blogs.msdn.microsoft.com
> .NET Standard 1.6.1-preview1 was published as part of this release. .NET Standard 2.0 support is still coming.
I feel like the highlight of .NET Core will be when it finally implements .NET Standard 2.0. For those who haven't been following, .NET Standard 2.0 is basically the moment when .NET finally reaches cross platform consistency parity with Java.
For Java, if you want to have a cross platform app, you just target Java. For .NET versions pre-.NET Standard 2.0 you basically target a mishmash of platforms through "profiles". Imagine that when you're creating a Java app you'd be forced to chose a "profile" that says: this app supports JavaCombo12 (AIX, Solaris, Linux). Then once MacOS is available as a platform you have to choose JavaCombo13, that includes that. And then JavaCombo14, JavaCombo15, etc.
Oh, I almost forgot! To make things more interesting, each "combo" could have different APIs available! :)
They are called:
- Android Java
- Java Micro Edition
- Java Embedded Edition with (compact profile 1, 2 and 3)
- Java Standard Edition
- Java Enterprise Edition
- MicroEJ Java
- Real Time Java
Ah, then there are the vendor specific features like AOT compilation to native code or value objects like the Packet Objects in J9, just to give a possible example.
Meanwhile, many of the examples from your list don't compare 1:1 with .NET profiles, because... :
- Android Java
This was caused by Google, so not $VENDOR's fault (Sun/Oracle).
- Java Micro Edition
This is moribund these days.
- Java Embedded Edition with (compact profile 1, 2 and 3)
This targets a totally different use case than the average .NET profile (most .NET profiles are minor variations on a theme).
- Java Standard Edition
Let's just call this "Java" :)
- Java Enterprise Edition
Let's call this "Java" + libs. It's hardly a profile, it's just Java + stuff on top.
- MicroEJ Java
I don't really know about this one.
- Real Time Java
See my comment about Java Embedded.
.NET profiles are IMO, just an ugly hack to re-add portability to a platform that was designed with portability in mind but then lost it gradually as it became more and more integrated with Microsoft platforms.
A Java version produced by IS2T for micro-controllers, think cortex-M class.
http://www.stm32j.com/products/
As for the rest, we will have to agree to disagree. Regardless how it looks like in detail, in the daily work they are issues to take into account when trying to write portable Java code.
.NET was designed with portability across processors and Windows versions, not for other vendors. Even Rotor wasn't fully compliant with .NET 1.0.
When looking at the histories told by Don Syme related to the initial generics design and Ext-VOS, .NET genesis was to be a native platform based on COM. Actually something that was brought back to life as .NET Native + WinRT.
As for the .NET profiles, they aren't perfect, but as someone that works daily with Java and .NET, I look forward to them.
One admittedly unpopular area it'll be missing is options for desktop development. I know that the trend these days is to use web interfaces, and web development makes up about 95% of my professional life.
But just out of curiosity, I picked up a WPF book from the library. And as I was reading through it, I remember thinking how nice it would be to be able to develop web apps with something like that. I suppose Silverlight would've been close, but it's dead these days.
It looks like JavaFX is broadly similar to WPF over in Java-land, and it appears to work fairly well cross platform. It doesn't look native on any platform, but that isn't always a deal breaker. Using Intellij's non-native looking Swing UI on my MacBook doesn't bother me, though I appreciate that not everyone feels that way.
I suppose this is my roundabout way of saying I'd love to have a decent cross platform .NET GUI framework. For anyone who wants this too, Avalonia looks like a good project to follow: https://github.com/AvaloniaUI/Avalonia
It doesn't appear to support .NET Core yet, but last time I checked they expected to be able to relatively soon.
In what concerns computers to control robots, measurement devices and doing ETL data processing of data readers, on the projects I have been involved it is 100% Windows native WPF applications, with the legacy ones being a mix of MFC and Windows Forms.
Let's say I want to target RHEL and CentOS, versions 5-7. If I build mono on a machine with an old enough glibc, that single build will run on all of these. What's the equivalent to run on all these platforms with .NET Core?
Keep in mind it sounds like .NET Standard basically is between the full .NET Framework and .NET Core. So if you have an existing .NET Framework app it's very possible it would just work on .NET Standard.
.Net Standard is just an API specification which will be implemented on the .NET Framework, .NET Core, or Xamarin runtimes. Technically it's a subset of the .NET Framework libraries. It's more of an improvement on .NET Core as it is bringing more APIs to that runtime.
So basically as long as you use the APIs in .NET Standard, your application can be compiled for any of those 3 runtimes.
>1380 APIs were added in this release
>Added support for Linux Mint 18, OpenSUSE 42.1, macOS 10.12, Windows Server 2016
It's even more confusing that there is absolutely no mention of .NET Core on the language's Github page - http://fsharp.github.io/
Also, .net Core does not have feature parity with .net4.6/mono, so you may want to know the gaps depending on the type of application being built.
There are basically two components that need polishing for .NET Core to be a reasonable choice - the implementation of NetStandard 2.0 for .NET Core (so you get all the old APIs back), and for the tooling to mature (transition from project.json back to fsproj). These efforts are coming along nicely [1][2], but still aren't ready for prime time.
Here's a roadmap that Enrico Sada has laid out to get the F# .NET Core situation to maturity: https://gist.github.com/enricosada/6f0a0424ca65b9d08e5a84f79...
And by the way, don't worry too much about switching over from Mono to .NET Core. With NetStandard 2.0 the API changes should be minimal. Similarly, once the cleaned up proj file format is out of preview the change in tooling from Mono to .NET Core should be minimal (or even non-existent).
[1] https://slack-files.com/T04BJKUMU-F2ST232AJ-6e68200a3d - Enrico Sada's work on getting dotnet cli to work with proj system for .NET Core [2] https://twitter.com/sforkmann/status/790488306991661056?s=09 - Steffen Forkmann getting Paket to work with new proj system
The ones I'm aware of that have ported to .net core are StructureMap and Autofac.