Revisting the gui.cs framework
tirania.org
tirania.org
Maybe I am too deep in my Linux filter bubble. Can someone give me some examples of where .NET on Linux really shines?
You can easily call C# code from F# so the fact that most of the .net librairies have been developed in C# has little consequences.
Now we just need Microsoft to realize they have a great language and to invest properly in its marketing...
Just a bad decision, which was not to bet that strongly into AOT (NGEN was only for faster startups).
While UWP (and its former incarnation on Windows 8.x) do use AOT, that is still a couple of releases away to join standard .NET tooling.
Naturally there is also Xamarin and Unity IL2CPP/Bust stacks, but they are special cases.
What does this refer to and how is it handled better in .net than in java?
And yes, Java is very feature-conservative.
As strange as it may seem to you, that is how a large set of corporations work.
Example: I wrote a Mandelbrot program compiled as a double-clickable JAR.
Nearly a decade later I find that it runs just fine, albeit more slowly, on . . . a Raspberry Pi.
There's also this less dead looking project, with goals that seem pretty similar. [1] Perhaps some day Java will finally gain this feature that obviously should have been there in the beginning. There's a reason .Net has them.
[0] http://openjdk.java.net/jeps/169
[1] https://cr.openjdk.java.net/~briangoetz/amber/datum.html
If you want to pay for a supported Java, with long term ongoing patches: call a commercial vendor of Java such as Oracle, Azul Systems, etc.
If you want a free and open source Java runtime, use Open JDK. Some sources of OpenJDK pledge to backport bug fixes from newer versions for some number of years. Or you can simply make sure your product continues to run on newer versions -- which for Java, according to history, has been easy to do.
Where to get Open JDK:
Adopt Open JDK https://adoptopenjdk.net/ https://github.com/AdoptOpenJDK
https://github.com/ojdkbuild/ojdkbuild
Open JDK http://openjdk.java.net/
Azul Systems Zulu http://www.azul.com/downloads/zulu/
Amazon https://aws.amazon.com/fr/corretto/ https://github.com/corretto
Eclipse https://www.eclipse.org/openj9/ https://adoptopenjdk.net/releases.html?variant=openjdk11&jvm... https://github.com/eclipse/openj9
Red Hat https://developers.redhat.com/products/openjdk/download/ https://access.redhat.com/articles/1299013
SAP https://github.com/SAP/SapMachine
BellSoft https://bell-sw.com/java.html
Oracle JDK -- supported for a limited time unless you pay https://jdk.java.net/11/ Oracle Binary License Agreement - DANGER Will Robinson! http://java.oracle.com/
See:
Time to look beyond Oracle's JDK https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jd...
Java is Still Free 2.0.0 https://medium.com/@javachampions/java-is-still-free-2-0-0-6...
With the rise of Azure, Microsoft cares less about Windows being the dominant server ecosystem than being the choice for server hosting and having a competitive ecosystem of tooling.
Do I consider C# to be a bad language? No, it is decent. But I do not see it shine outside of the Windows ecosystem. This might be a chicken-egg problem.
My main point is: MdI has supported .NET on Linux for so long. But I cannot grasp why. I admire his efforts and it would be beneficial to understand his motives so that I would know how I can use .NET on Linux for my own advantage. My post is really not meant to negatively criticise C#/.NET. Learning a language is often a multi-step process. The syntax is usually the first thing you learn. But the deeper you dive into the language the more you understand the design decisions. For example, it took me several attempts to understand Clojure and Lisps in general. And I assume that there are some important things about C# that I haven't understood yet.
[1] https://stackoverflow.com/questions/53954047/does-wpf-applic...
I'll check it out. Thanks!
A very large chunk of the games market on Mac and Linux either runs C# as the scripting host that's the primary developer interface (Unity, etc.) or runs directly on Mono or .NET Core (games made with XNA are almost drop-in-portable to FNA, there's also MonoGame, and Ultraviolet is new but pretty compelling--I'm currently fooling around with it for a project).
Today C# is a thoroughly okay language. It was a huge step forward compared to Java when it was younger and more nimble but now they have real trouble pushing new features (for reasons that are not technical). But it isn't about the language--it's that it's what people know.
And, if I'm being fair, JetBrains Rider is a really pleasant way to write C# these days.
Compared to something like Nest.js and TypeScript, or even Kotlin and Spring Boot, I wouldn't call it good, let alone "best".
Did Python or Ruby bring something that the Linux ecosystem was lacking at the time? Do you see how this is a fairly irrelevant question?
But to answer it anyway, the .NET VM has quite a few advantages over the JVM, and the libraries and semantics of C# provide a superior experience to Java on the JVM. Of course, no language or VM is perfect.
So C# is a more readable and writable version of Java.
> and Ruby, a clean alternative to PHP once RoR got out
That was 10 years after Ruby was first released. Assuming "justification" is needed, what justified Ruby prior to that?
And I mean "yum" popular. Blender popular. QGIS popular. Not "that script that sort my ssh connection is in Ruby" popular.
How is that relevant? The question was what justified Ruby at the time.
If "Ruby on Rails" was the only justification, why did people use it for the 10 years prior to that? Were they not justified in using it? That's just nonsense.
That said, having heavily used Java (6 or 7?), C# was a breath of fresh air (without going back to the headaches of C++). Java didn't even have proper anonymous functions at the time, so getting basic type inference, expression trees, a powerful reflection capability, and avoiding type erasure was a great improvement.
Yes, I have used Java 6 and 7 and yes, I found them limiting compared to other languages. I only used Java when I had to. I mean, even right now I would only pick it if the problem that I want to solve fits the "everything has to be part of a class" mindset.
1) C#'s interface to C/C++ (P/Invoke or Platform Invoke) is generally easier than the Java equivalent (JNI or Java Native Interfaces).
2) C#'s interface to COM and COM-like systems (Bonobo and Gnome/Gtk's GObject world, for instance) is a little bit stronger and again somewhat easier than the Java equivalent.
Admittedly, some of that "easier" is subjective, depending on one's background and training, but C# coming from working with complex platform combinations of Win32 and COM has had to have some focus on making platform and object system interop work well, whereas Java always felt like (to me, at least) platform interop was more often a "bug" to eventually work around with a "pure" Java library given the chance.
Semi-related aside: It's still something of a shame that anti-.NET sentiment several years back damaged so much of the reputations of so many of the best C# Linux applications. There was briefly a time where there were several very strong Gnome-environment C# applications in-box in Ubuntu, and I still think it was a mistake they were dropped. A lot of the arguments from that period somewhat soured me on running Ubuntu as a daily driver and some of my opinion of the larger Linux open source community. It was exciting seeing apps that I could so easily contribute to (as someone's whose day job efforts typically were C# at the time) in the box, it was angering seeing them denigrated not on their own merits but by indirect association with Microsoft (despite Mono's distance at the time, open patent promises, etc).
.NET also makes it relatively simple to work with memory on the stack (especially via `stackalloc`), as well as unmanaged memory on the heap. Of course, many developers never have optimisation problems that require these tools, but they are fantastic when you do need them.
It's maybe still too early to make predictions of long-term impact, but it really does seem like it puts C# into a good position to take on even more "performance critical" work day-to-day, possibly keeping C# competitive with (and even mentionable in the same sentence as) languages such as Rust and Go. (Especially when combined with AOT/.NET Native compilation.)
It is definitely something I'm keeping an eye on.