Oracle a récemment annoncé que JDK 17 est entré dans la phase 2 de Rampdown.
Cette phase signifie que l'ensemble des fonctionnalités est gelé et qu'aucun autre JEP ne sera ciblé sur cette version.
La liste finale des fonctionnalités arrivant dans JDK 17 est :
- JEP 306: Restore Always-Strict Floating-Point Semantics
- JEP 356: Enhanced Pseudo-Random Number Generators
- JEP 382: New macOS Rendering Pipeline
- JEP 391: macOS/AArch64 Port
- JEP 398: Deprecate the Applet API for Removal
- JEP 403: Strongly Encapsulate JDK Internals
- JEP 406: Pattern Matching for switch (Preview)
- JEP 407: Remove RMI Activation
- JEP 409: Sealed Classes
- JEP 410: Remove the Experimental AOT and JIT Compiler
- JEP 411: Deprecate the Security Manager for Removal
- JEP 412: Foreign Function & Memory API (Incubator)
- JEP 414: Vector API (Second Incubator)
- JEP 415: Context-Specific Deserialization Filters
Java 17 est la prochaine release Long-Term Support (LTS) et est attendue pour septembre 2021.
L'opinion déclarée d'Oracle est qu'il n'y a rien de spécial à propos des versions LTS, et elles correspondent simplement à un produit de support Oracle et ne devraient pas être importantes pour quiconque n'est pas un client qui achète le support d'Oracle.
L'écosystème et la communauté Java, cependant, ne se sont pas encore alignés sur les messages d'Oracle.
Il n'y a aucune preuve que de nombreuses équipes mettent à niveau leur version Java pour correspondre au numéro de version majeure sur une cadence de six mois. Les données de la base de clients de New Relic (contenant des dizaines de millions de JVM de production) indiquent qu'aucune version Java non LTS n'a jamais atteint plus de 1,5 % de part de marché, et la plupart des versions Java non LTS tombent rapidement pour revenir entre 0 et 0,5 % quelques mois après la sortie.
Au lieu de cela, le marché dans son ensemble continue d'utiliser Java 8 et 11, même si cela signifie s'éloigner d'Oracle et s'appuyer sur un autre fournisseur pour fournir des mises à jour incrémentielles de 8 et 11. Les deux versions LTS se rapprochent maintenant d'une part de marché égale. (avec les versions non LTS en dessous du niveau de bruit statistique). Cela représente une adoption beaucoup plus lente de Java 11 (trois ans à environ 50 % de part de marché) par rapport à la vitesse à laquelle Java 8 a été adopté.
Dans l'ensemble, les fonctionnalités présentes dans Java 17 suivent globalement le modèle attendu, comme InfoQ l'a précédemment signalé. La triste vérité est que parmi les projets majeurs qui ont été les principaux domaines de développement du JDK au cours des trois dernières années (Loom, Valhalla, Amber et Panama) - aucun n'est terminé à la sortie de Java 17.
Cela signifie que l'ensemble des fonctionnalités de Java 17 sera plus modeste que ne l'espéraient de nombreux développeurs.
Par exemple, la fonctionnalité des Algebraic Data Types (comprenant les records et les types scellés) est terminée à partir de 17. Il s'agit d'un grand pas en avant en termes de modélisation des données et d'amélioration des capacités OO du langage Java. Cependant, la fonctionnalité Pattern Matching qui complète et s'appuie sur les types de données algébriques n'est présente qu'en tant que fonctionnalité Preview dans Java 17 (et uniquement sous une forme assez rudimentaire).
Il ne s'agit que d'une livraison partielle du projet Amber - et Amber a l'avantage que la structure du projet se prête assez bien à une livraison incrémentielle. Des projets comme Loom et Valhalla - qui sont beaucoup plus de nature "Big Bang" - ne sont pratiquement pas du tout présents dans Java 17 (à part quelques bases préliminaires qui ne font pas vraiment apparaître de nouvelles fonctionnalités accessibles aux utilisateurs).
Sur une note plus optimiste, si le modèle établi de la majorité des mises à niveau de LTS vers LTS se poursuit (et nous n'avons aucune indication que la communauté fera autre chose), alors les équipes qui passent de Java 11 à 17 trouveront toujours de nombreux avantages. Les principales fonctionnalités susceptibles d'intéresser les développeurs qui effectuent une mise à niveau sont :
- Switch Expressions
- Enhanced instanceof
- Text Blocks
- Records
- Sealed Types
- JFR Streaming
- Enhanced Modern Cryptography
- Class Data Sharing
- Les ramasse-miettes Shenandoah et ZGC
ainsi que de nombreuses améliorations de performance et autres améliorations internes.
Cela signifie que bien que Java 17 puisse être une version "verre à moitié plein", il représente une autre étape majeure dans l'évolution du langage.
Les versions bêta complètes des fonctionnalités sont disponibles en téléchargement ici et la version finale de Java 17 devrait être publiée le 14 septembre.