This is nuts to me how behind Java is. Is it only due to the backward compatibility? Or is there some crazy red tapping every time something is added?
This is nuts to me how behind Java is. Is it only due to the backward compatibility? Or is there some crazy red tapping every time something is added?
OTOH, Java programmers look in astonishment at how far behind most other platforms are in GC, compilation, and observability.
Additionally Java has a longer history than most of backwards compatible software that contributes to a higher burden of testing before making changes to the core language.
Finally there is the community itself which favours high performance and reliability and prefers where possible to make use of libraries rather than change the language or runtime itself.
That isn't to say Java isn't evolving or that the JVM itself is stagnant.
The introduction of the Java module system allowed the JRE itself to become a much lighter dependency. Things like Project Loom seek to bring Erlang-like fiber/green thread support to the JVM and will probably land in a release soon.
Also the release cadence has been changed so new releases are now landing much more frequently which is increasing the pace of development.
The virtual machine and stdlib continue to see innovation, while the ease of implementing JVM languages like Scala and Kotlin mean that Java can let these new languages innovate, and pick the best features when they're proven (with improved performance normally too).
You can see this with Lambdas, and now with Records and pattern matching
- Almost every feature added makes every feature that comes after it more expensive to add
What makes these arguments specific to Java?
They are especially bad with exotic operators like postgres' JSONB columns. I ended up ripping jooq out of an app over this.
There's an argument that they bring type safety to SQL, but Intellij actually validates your string literal SQL against the schema, so the benefit is marginal.