Georges Saab, Oracle's senior vice president of development for the Java Platform Group, stood onstage at the JavaOne conference last week and touted the merits of Java 19. However, developers are already looking forward to Java 20, which might bring improvements to concurrency, profiling and universal generics.
Java 19, or Oracle Java Development Kit 19, was released last month and incorporates thousands of improvements for performance, security and stability via seven JDK Enhancement Proposals (JEPs), most of which enhance functionality present in earlier releases.
Java 20 will drop in March 2023, following Java's six-month feature release cadence. Developers would like to see improvements such as better tooling support or simplifying common tasks, said Jeroen van Gils, web designer and CEO of LiFi.co, a light fidelity information website.
"Developers want Java to be a language that is easy to use and adopt for new projects," he said. "We'll have to wait and see what the final [Java 20] release brings, but it's sure to be an exciting year for Java development."
What developers want in Java 20
Java should continue to evolve in ways that make it more performant and efficient, van Gils said.
Jeroen van GilsCEO, LiFi.co
"This could include things like supporting more concurrent programming paradigms or making improvements to the just-in-time compiler," he said. Concurrent programming refers to code that facilitates running many tasks at the same time, while the just-in-time compiler can optimize performance and improve runtime.
While Java 19 included a Structured Concurrency incubating feature, JEP 428, it is unknown whether Java 20 will include further improvements to either concurrent programming or the just-in-time compiler. Currently, no proposals are listed on the Java 20 page on OpenJDK, Java's official reference guide, although more details are expected soon.
Morshed Alam, founder and editor at Savvy Programmer, a programming learning site, agreed that more language features to make writing concurrent code easier would be a welcome addition to Java 20, as well as better support for functional programming, which enables Java to treat computations as an evaluation of mathematical functions; Java began transitioning to functional programing with Java 8.
"Additionally, there is a desire for better performance and improved tools for debugging and profiling," Alam said.
JEP draft 8284289, Asynchronous Stack Trace VM API, is one possible Java 20 candidate that could improve profiling, which captures information about code execution at runtime. The draft's goals include providing an official API for external profilers to capture information on Java and native frames.
Another JEP draft and possible contender for Java 20 is Universal Generics, which will make it easier for developers to reuse code.
But making improvements to universal generics doesn't go far enough, according to Valentin Iancu, development manager at Advanced, an application modernization company.
"While enhancing the universal generics seems to be a priority for Java, I'd also like to see some more efforts on improving overall generics," he said. Generics, or parametrized types, make it easier to find bugs at compile time.
More C#-like properties in Java, which would reduce boilerplate code and help with conversions from other languages, would also be nice, Iancu said.
Java should also go more in the direction of parallel processing to improve the developer experience, said Tiago Cardoso, group product manager at Hyland, a content services provider.
For example, "having easy APIs that work almost out of the box with minimum configuration and provisioning, or having libraries that help with this," he said.
The library Akka makes this easy in Scala, Cardoso said. However, Java does not have an equivalent library.
Java 20 unlikely to address inheritance issues
Of the JEPs up for consideration, only about a dozen might make it through to Java 20. Most will be incremental updates to features already in preview, so it's unlikely that developers will see major overhauls in Java 20, such as tackling legacy inheritance issues -- which needs addressing, said Andrey Sundukov, senior Java software engineer at Natera, a genetic testing company in Austin, Texas.
Prior Java releases often created legacy inheritance issues by breaking the set of design principles for software development (SOLID), Sundukov said. SOLID is used for object-oriented programming languages; much of Java's design revolves around OOP.
"For example, the Java implementation of collections hierarchy unfortunately requires using OperationNotSupportedException when you try to use immutable implementations," he said.
Each deviation from SOLID adds more chances for bugs and mistakes in a codebase, which could explain the appearance of new languages such as Kotlin and Scala running on the Java virtual machine, Sundukov said.
"They don't have this legacy inheritance, and that is why a lot of developers like them -- including me," he said.