Java the language was memory safe. The runtime and libraries weren’t all memory safe. The JIT’s can break memory safety. Applets had integration issues. So, what hurt Java were opportunities to go around memory safety instead of attacking that memory-safe code.
Memory-safe, system languages (eg Ada, Rust) address this by having as much as possible in memory safety with either little or zero runtime. Rust makes things safe that weren’t before. It has unsafe which is less used than some other languages. The type checker can also catch many logic-level errors. The safety situation is better with Rust than Java code.
That doesn’t mean it will solve NVIDIA users’ problems, though. They are usually worried about compatibility, performance, and reliability. Rust mostly helps in one area. We’ll see about the rest, especially compatibility, as you said.
Java is forever stuck in my head as a bad language because it's UI library performance were so bad. I grew up being annoyed with anything written in Java because of its poor performance on Mac OS X. Notable was the persistent UI lag with anything written in Java.
Java was crippled by a terrible standard UI library and a failure to recognize the opportunity for a natively-compiled systems language other than C++.
JetBrains is doing quite well with such terrible UI library, with I would take any day over Electron crap, and AOT compilers have been available since 2000, even if only on commercial JDKs, which naturally did not did well on communities that won't pay for their work tools.
I think the GP is talking about AWT, which is indeed terrible. JetBrains uses Swing, which is... still not really the best, but IIRC they've done a lot of work to write their own abstractions and helpers and whatnot on top of it to make it more bearable.
Swing is quite powerful, the only downside is that it requires reading books like "Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java Applications" to actually understand how to take advantage of its features, and the bad decision to not use by default the platform's L&F.
> JetBrains uses Swing, which is... still not really the best, but IIRC they've done a lot of work to write their own abstractions and helpers and whatnot on top of it to make it more bearable.
Swing feels pretty okay to me, at least in the times I've used it, especially when IDEs have GUI builders when you just want to do RAD.
I do wonder whatever happened to JavaFX, there was some hype around it years back but it doesn't seem like it got super widespread adoption: https://openjfx.io/
JavaFX was born as a scripting language[0], which most devs didn't like, and then Sun started the process to port it to Java.
In the middle of this, Sun went bankrupt and while Oracle took the JavaFX development further, they didn't see any value in adding yet another GUI framework to Java, and made it open source to the community by the time Java 11 was released.
A company, Gluon took over it [1], making their business case as means to use JavaFX to also target mobile OSes [3]. They also took over the JavaFX GUI designer. [2]
That was mostly ignored, as Java strong points focused on the server, Android is its own story, with their own frameworks, thus Swing was good enough for the market of desktop applications written in Java.
Additionally it didn't help that JavaFX is an additional dependency, with binary libraries, which kind of complicates the deployment story.
However, recently Oracle decided to be a bit more supportive of JavaFX, if it still matters, remains to be seen.
Actually AWT wasn't awful. It was certainly more performant than swing, in fact swing was the main thing that had me avoiding UI work and eventually dropping java in favour of .net
I thought jetbrains used their own UI layer for their IDE, or am I confusing it with Eclipse there?
Memory-safe, system languages (eg Ada, Rust) address this by having as much as possible in memory safety with either little or zero runtime. Rust makes things safe that weren’t before. It has unsafe which is less used than some other languages. The type checker can also catch many logic-level errors. The safety situation is better with Rust than Java code.
That doesn’t mean it will solve NVIDIA users’ problems, though. They are usually worried about compatibility, performance, and reliability. Rust mostly helps in one area. We’ll see about the rest, especially compatibility, as you said.