Le JDK 18, la première version non-LTS depuis le JDK 17, a atteint sa phase initiale de release candidate comme déclaré par Mark Reinhold, architecte en chef, Java Platform Group chez Oracle. Le référentiel source principal, dérivé du référentiel de stabilisation du JDK début décembre 2021 (Rampdown Phase One), définit l'ensemble des fonctionnalités pour le JDK 18. Les bugs critiques, tels que les régressions ou les problèmes de fonctionnalité graves, peuvent être résolus, mais doivent être approuvés via le Processus de demande de correctif.
L'ensemble final de neuf nouvelles fonctionnalités, sous la forme de JEP, peut être séparé en trois catégories : bibliothèque Java Core, outils Java et spécification Java. Nous les examinons ici et incluons où certaines de ces nouvelles fonctionnalités relèvent des quatre principaux projets Java - Amber, Loom, Panama et Valhalla - conçus pour incuber une série de composants pour une éventuelle inclusion dans le JDK via une fusion organisée.
Sept de ces nouvelles fonctionnalités peuvent être placées dans la bibliothèque Java Core :
- JEP 400: UTF-8 by Default (
java.nio.charsets
) - JEP 408: Simple Web Server (
java.net
) - JEP 416: Reimplement Core Reflection with Method Handles (
java.lang.reflect
) - JEP 417: Vector API (Third Incubator)
- JEP 418: Internet-Address Resolution SPI (
java.net
) - JEP 419: Foreign Function & Memory API (Second Incubator)
- JEP 421: Deprecate Finalization for Removal (
java.lang
)
Deux d'entre elles, les JEP 417 et JEP 419, apportent une contribution continue à la réalisation du projet Panama, un projet conçu pour améliorer et enrichir l'interopérabilité entre la JVM et des "éléments externes" bien définis, c'est-à-dire non-Java, des API qui incluront très probablement les interfaces couramment utilisées dans les bibliothèques C. Lancé en 2014, le projet Panama est dirigé par Maurizio Cimadamore, architecte logiciel chez Oracle. Les early-access builds, mises à jour pour la dernière fois le 18 janvier 2022, sont basées sur une version incomplète du JDK 19.
La JEP 418 apporte une contribution continue à la réalisation du projet Loom, un projet conçu pour explorer, incuber et fournir des fonctionnalités dans la JVM et des API Java conçues dans le but de prendre en charge une concurrence légère facile à utiliser et à haut débit et de nouveaux modèles de programmation. Cela serait accompli via des threads virtuels, des continuations délimitées et des appels de queue. Lancé en 2018, le projet Loom est dirigé par Ron Pressler, membre consultant de l'équipe technique d'Oracle. Les Early-access builds, mises à jour pour la dernière fois le 13 février 2022, sont basées sur le Build 9 du JDK 19 early-access builds.
Parmi les deux JEP restantes :
- la JEP 413: Code Snippets in Java API Documentation
appartient à la deuxième catégorie, les outils Java. Cette JEP introduit la balise @snippet
pour le Doclet standard d'Oracle, l'utilitaire de documentation de l'API Java bien connu qui produit une sortie au format HTML par défaut. L'intention est de simplifier l'inclusion d'exemples de code source dans la documentation de l'API.
Et enfin :
- la JEP 420: Pattern Matching for switch (Second Preview)
peut être placée dans la catégorie spécification Java. Cette JEP apporte une contribution continue à la réalisation du projet Amber, un projet conçu pour explorer et incuber des fonctionnalités du langage Java plus petites afin d'améliorer la productivité. Lancé en 2017, le projet Amber est dirigé par Brian Goetz, architecte du langage Java chez Oracle.
Selon le calendrier de publication, le 22 mars 2022 est la date de sortie officielle du JDK 18.
JDK 19
Prévu pour une version GA en septembre 2022, il n'y a pas de JEP ciblée pour le JDK 19 pour le moment. Cependant, sur la base des récents brouillons de JEP, des JEP candidates et du Inside Java Newscast #18 (Java's Plans for 2022) par Nicolai Parlog, Java developer advocate chez Oracle, nous pouvons supposer quels JEP ont le potentiel d'être inclus dans JDK 19.
Le projet Valhalla, un projet conçu pour explorer et incuber des fonctionnalités avancées potencielles de la JVM et Java. Cela inclurait les value types, la spécialisation générique et les volatiles améliorés. Lancé en 2014, le project Valhalla est également dirigé par Brian Goetz. Les Early-access builds, mises à jour pour la dernière fois le 30 août 2019, sont très limitées pour le moment, mais l'activité au sein de ce projet a augmenté au cours de l'année écoulée.
Les plans pour le projet Valhalla en 2022 incluent : les value classes (JEP Draft 8277163, Value Objects (Preview)); les primitives classes (JEP 401, Primitive Classes (Preview) et la JEP 402, Classes for the Basic Primitives (Preview) ); et les génériques universels (JEP Draft 8261529, Universal Generics (Preview)). Les développeurs peuvent en savoir plus sur Project Valhalla en lisant la série en trois parties publiée par Goetz en décembre 2021 :
- State of Valhalla, Part 1: The Road to Valhalla
- State of Valhalla, Part 2: The Language Model
- State of Valhalla, Part 3: The JVM Model
Les plans pour le projet Amber en 2022 incluent : la finalisation des patterns dans l'instruction switch (vraisemblablement une troisième preview en tant que suivi des JEP 420 et JEP 406, Pattern Matching for switch (Preview), livré dans le JDK 17); et introduire des patterns supplémentaires, tels que la déconstruction des records/tableaux (JEP 405, Record Patterns (Preview)) et éventuellement des patterns sur des classes régulières. Initialement nommé Record Patterns & Array Patterns (Preview), la JEP 405 est lié à la JEP 406.
Les plans pour le projet Panama en 2022 incluent : migrer les API foreign en incubation actuelles vers des previews ; améliorer les implémentations d'API foreign ; décider de l'avenir de jextract
, c'est-à-dire s'il doit s'agir d'un projet indépendant avec un référentiel correspondant ; et mettre en attente l'API Vector jusqu'à ce que les value et types primitives aient été implémentés dans le projet Valhalla. La JEP Draft 8280173, Vector API (Fourth Incubator), propose d'incorporer des améliorations basées sur les commentaires de la communauté Java aux trois précédentes JEPs, à savoir : JEP 338, Vector API (Incubator), livrée en JDK 16 ; la JEP 414, Vector API (Second Incubator), livrée dans JDK 17 ; et la JEP 417, Vector API (Third Incubator), qui sera livrée dans la prochaine version GA de JDK 18.
Les plans pour le projet Loom en 2022 incluent : finaliser la JEP Draft 8277131, Virtual Threads (Preview) et la JEP Draft 8277129, Structured Concurrency (Incubator) ; fusionner ces fonctionnalités dans le référentiel principal du JDK ; et explorer plus en détail comment rendre les applications hautement concurrentes plus débogables et faire évoluer la concurrence structurée. La JEP Draft 8263012, Scope Locals (Incubator), propose d'améliorer l'API Java avec des scopes locaux, qui sont dynamiquement étendus, des valeurs locales effectivement finales. Ils permettent une forme légère d'héritage de threads.
Nous prévoyons qu'Oracle commencera très prochainement à cibler certains d'entre eux et d'autres JEP pour le JDK 19.