Java 19 a été livré hier, 20 septembre 2022, comme prévu. Cette version constitue la 10ème depuis le passage au rythme semestriel, il y a 5 ans. Une cadence de plus en plus appréciée par les utilisateurs, assure Georges Saab, vice-président responsable de la plateforme Java chez Oracle, qui pointe l’augmentation des téléchargements additionnels sur les bibliothèques, frameworks et outils associés. Toutes ces versions, ont été livrées en temps et en heure, rappelle-t-il, ce qui apporte une bonne prédictibilité sur le pipeline d’innovation de Java à ceux qui contribuent au Java Development Kit (JDK) et aux entreprises. « Pour une communauté aussi importante que l’est celle de Java, il est vraiment important d’être régulier », a-t-il souligné en début de semaine lors d’un point presse en ligne en amont du lancement de Java 19. Les clients veulent savoir à quoi s’attendre et pouvoir planifier, ce qui n’était pas possible avant le rythme semestriel, avec des versions énormes et parfois livrées de façon décalée, a-t-il reconnu. Aujourd’hui, les développeurs peuvent prendre la mesure des changements proposés et de ce qui en découle, les cas d’usage, etc. L’évolution est prévisible et incrémentale.

Il est également important de faire en sorte que les progrès accomplis ne rebutent pas l’importante base historique d’utilisateurs, fait valoir George Saab. Les versions LTS (long time support) interviennent tous les trois ans, ce qui sécurise les équipes qui gèrent leurs applications en production, celles-ci ayant par ailleurs la possibilité de suivre les dernières évolutions, rappelle-t-il. La dernière LTS s’applique au JDK 17 sorti en septembre 2021. « Avoir une version LTS tous les trois ans associées aux livraisons semestrielles, ça semble être une très bonne combinaison », estime le responsable du développement de la plateforme Java. Il ajoute qu’en plus de la prédictibilité apportée, toutes les évolutions sont faites de telle façon que les développeurs puissent se sentir confiants. « La conception, les innovations et mises en oeuvre sont faites à travers l’OpenJDK piloté par mon équipe chez Oracle, mais les développeurs peuvent par ailleurs rejoindre l’OpenJDK et sa mailing list afin de voir tout ce qui se passe, suivre l’examen des propositions, etc. », expose Georges Saab. En résumé et en d’autres termes, tous les processus de développement de Java qui se déroulent en arrière-plan ne sont pas choses mystérieuses inaccessibles, ainsi que les développeurs le savent.

Maintenir l'esprit de Java tout en relevant des défis

Au sein du JDK, les six projets-clés en cours, certains depuis un certain nombre d’années, poursuivent leur avancée. Ce sont en premier lieu Amber (amélioration de la productivité), Loom (passage à l’échelle de threads légers pour faciliter les accès simultanés) et Panama (haute performance et création plus facile d’applications associées à des entrées/sorties intensives) qui progressent dans Java 19, mais aussi - avec des bêta plus abouties - Leyden, Valhalla et ZGC (ces deux derniers projets ayant été jugés dès le départ très prometteurs). Leyden a l’objectif d’accélérer le démarrage pour obtenir des performances de pointe. Valhalla est centré sur la façon dont les données sont représentées en mémoire par Java, en tirant parti du matériel sous-jacent. ZGC porte sur la capacité du ramasse-miette (garbage collector) de monter en puissance pour prendre en charge d’énormes quantités de données (terabytes ou pétabytes) sans affecter la capacité de réponse aux transactions. Concernant les différentes propositions apportées dans ces projets, Georges Saab souligne la volonté d’essayer de maintenir l’esprit de Java (« Java feel »), tout en relevant de nouveaux défis, avec une approche la plus naturelle et évidente possible sur les évolutions. Un exemple sur Amber. Le projet a cherché à résoudre les problèmes au fur et à mesure à l’aide de petits changements, indique M. Saab.

La capacité à fournir des bêtas régulièrement sur les versions semestrielles contribue à augmenter les feedbacks des développeurs et permet de renforcer les fonctionnalités, ce qui en bout de course, profite à la qualité du langage de programmation, souligne le responsable du développement de la plateforme Java. Dans les entreprises, sur les pipelines CI/CD utilisés pour tester les applications et les déployer en production, les équipes peuvent avoir deux pipelines en parallèle, suggère Georges Saab. L’un exploitant la version LTS de Java (chacune bénéficiant d’un très long support de la part d’Oracle) et l’autre la dernière release semestrielle en date pour avoir une idée de la façon dont les évolutions vont affecter les applications. C’est quelque chose qui semble se mettre en place avec la nouvelle cadence de livraison de Java, avance M. Saab.

Virtual Threads, projet Loom, un impact important à terme

Concernant les améliorations livrées sur le JDK 19, le projet Amber continue à amener de petites améliorations sur la syntaxe de Java, cette fois avec la bêta de Record Patterns (proposition/JEP 405). Les Record Patterns « peuvent être utilisés en conjonction avec les type patterns pour permettre une forme robuste, déclarative et composable de navigation et de traitement des données », décrivait en mai dernier le spécialiste de Java Jean-Michel Doudoux sur le site de la communauté de développeurs InfoQ, toujours à la pointe. De nombreux développeurs pourront les utiliser dans leur programmation de tous les jours, indique Georges Saab.

Les premières fonctions du projet Amber sont apparues dans Java 10. (Crédit : Oracle)

Sur le projet Loom, le responsable du développement Java chez Oracle met en avant l’une des propositions qui pourrait avoir le plus d’impact au fil du temps. Pour lui, c’est Virtual Threads (JEP 425), livrée ici en préversion. « Cela pourrait porter l’évolutivité de Java à un autre niveau », assure-t-il. Historiquement, il n’y a pas de différence entre un thread Java et un thread natif et si l’évolutivité de Java est bonne, elle est limitée à ce que la plateforme native procure, rappelle M. Saab. « Virtual Threads introduit le concept de threads virtuels extrêmement légers en Java qui sont reliés à des milliers ou même des dizaines de milliers de threads virtuels à un thread natif », expose-t-il. « Et le runtime s’occupe de l’ordonnancement entre ces différents threads pour contrôler le traitement d’autant de processus que possible en parallèle. (...) Et on peut en tirer profit sans changer son modèle de programmation ». Ce devrait être très important pour les développeurs qui conçoivent des frameworks ou des bibliothèques, conclut-il. Le projet Loom apporte également une bêta de Structured concurrency (JEP 428).

Panama JEP 424 pour embarquer des bibliothèques natives

Sur le projet Panama, consacré aux interactions avec les autres langages et codes natifs, arrive en préversion la proposition 424 Foreign Function and Memory API. « C’est exactement le genre d’API que l’on peut utiliser pour, par exemple, empaqueter des bibliothèques natives comme Tensorflow pour rendre vraiment accessible l’apprentissage machine aux développeurs Java », explique Georges Saab.

On note le poids des développeurs indépendants dans le JDK 19, mais aussi celui des fournisseurs de technologies d'origine chinoise. (Crédit : Oracle)

De nombreuses fournisseurs de technologies ont contribué au JDK 19 derrière le navire amiral que constitue Oracle. Parmi eux, on retrouve Red Hat en tout premier lieu et de très nombreux développeurs indépendants qui représentent ici la troisième force à l’oeuvre dans cette version 19. Du côté des autres fournisseurs ayant contribué à résoudre des problèmes sur le JDK 19, le Chinois Tencent est l’un des principaux contributeurs, suivi d’Amazon, d’ARM, d’Intel, d’Alibaba, de JetBrains, d’IBM, de Huawei et de NTT Data. Egalement présent de façon notable, Google, Azul, Fujitsu, Bell Soft, Microsoft, Loongson, Datadog et Skymatic.

Une vidéo sur la présentation de ces nouveautés par Georges Saab, Chad Arimura et Sharat Chander, tous deux responsables des relations avec les développeurs Java chez Oracle, est accessible sur le site Inside.java. L’OpenJDK JDK 19 est téléchargeable à l’adresse https://jdk.java.net/19/