It's great to see Java finally starting to move again, but frankly if you think "modern Java" is good then you could've had all that for 15+ years with Scala - why do you want to wait 15 more years for the other half of what Scala offers?
Your 3 states
First, Project Loom was announced in late 2017 [1]. So I don't really understand where you get that decade from? Second, it is available as a preview feature in latest JDK. Why would people adopt a preview feature in their production systems? A lot of frameworks have already added support or as a minimum started working on support for virtual threads. I'm sure all major frameworks will support them once they are out of preview.
[1] https://cr.openjdk.java.net/~rpressler/loom/loom/sol1_part1....
I might've been mixing them up with value types. Or I may have been thinking of an earlier effort that was then subsumed into Project Loom.
> Second, it is available as a preview feature in latest JDK. Why would people adopt a preview feature in their production systems?
Exactly my point. If someone is arguing "I don't need Scala's support for lightweight concurrency because modern Java has that" - well, it sort of does, but they're not actually production ready.
> A lot of frameworks have already added support or as a minimum started working on support for virtual threads. I'm sure all major frameworks will support them once they are out of preview.
This is purely speculative, but I think there are going to be a lot of unforseen bugs and edge cases when people start actually using them. So I think it's really important to be clear that they're not in actual production use at the moment.
But now that it's modern, and it's moving quickly... I see less and less need to use these "better Java" languages.
It’s still good old verbose Java. But the entreprise Java insanity is over and other stuff than spring emerge ( Java Lin for instance )
Functional programming is still cumbersome. Having a map of <enum,function> for instance requière some googling and weird syntax.
But it’s possible. Getter/setter are gone. Immutable records replace them.
Next version the thread model gets an update. No more system thread. So spawning them carelessly will be possible ( ala Coroutine in go)
Also, Java IDEs are still the best imo, so I wouldn’t be surprised if in fact you would type less for equivalent Java programs than in case of a much less verbose language sheerly due to the killer autocomplete.