What’s wrong with Java and the JVM really, particularly when Java has concise lambdas, pattern matching, virtual threads not to mention real threads that really work?
Well for starters, getting hold of a modern JDK seemed to be impossible the last time I tried (which was a couple of years ago on Windows). If I took the risk of downloading from the shady website that looked like it was last updated in 2005, I could get hold of Java 8 if Oracle was so generous as to let me download that for free .
And then the language itself forces class based programming (which isn't really OOP), which I heavily dislike due to it only over-complicating things in the long run. C# provides largely the same, but MS is actually way more open than Oracle as in it's easy to get documentation and the dev environment set up, and they provide newer and more modern features than Java. Which is surprising given it's Microsoft and their fetish for providing counter-intuitive and user-unfriendly products. When it comes to the JVM / .NET CLR, the only place I find it acceptable is on the server side IMO. The downgrade in performance (which means higher resource usage) side is not worth the "everything is an object" vision for me, at all. Not even close. Client side devices often run on battery power, so that has real consequences there.
So that's why I'm personally not the biggest Java fan. In fact, if anything on harmful.cat-v.org is true, it's "Java is write once, run away" for me... sorry. If only Oracle could provide the same user-friendliness that Microsoft is showing with .NET, ditch class-based programming (which means rewrite the entire language, not very realistic) then maybe it could be interesting, but most likely not better than Go or Node.js, in my experience anyways.
And by the way, what do you mean by threads that really work? It's cool that Java gives you the power of having system threads and green threads in the same environment, but when is that realistically needed? Only time I can think of is writing client-sided code where you want performance to be highly optimized and not wanting to waste time on organizing a new green-thread, but as I've mentioned I believe Java on the client side is nothing but a sin.
And then the language itself forces class based programming (which isn't really OOP), which I heavily dislike due to it only over-complicating things in the long run. C# provides largely the same, but MS is actually way more open than Oracle as in it's easy to get documentation and the dev environment set up, and they provide newer and more modern features than Java. Which is surprising given it's Microsoft and their fetish for providing counter-intuitive and user-unfriendly products. When it comes to the JVM / .NET CLR, the only place I find it acceptable is on the server side IMO. The downgrade in performance (which means higher resource usage) side is not worth the "everything is an object" vision for me, at all. Not even close. Client side devices often run on battery power, so that has real consequences there.
So that's why I'm personally not the biggest Java fan. In fact, if anything on harmful.cat-v.org is true, it's "Java is write once, run away" for me... sorry. If only Oracle could provide the same user-friendliness that Microsoft is showing with .NET, ditch class-based programming (which means rewrite the entire language, not very realistic) then maybe it could be interesting, but most likely not better than Go or Node.js, in my experience anyways.
And by the way, what do you mean by threads that really work? It's cool that Java gives you the power of having system threads and green threads in the same environment, but when is that realistically needed? Only time I can think of is writing client-sided code where you want performance to be highly optimized and not wanting to waste time on organizing a new green-thread, but as I've mentioned I believe Java on the client side is nothing but a sin.