Java 14 : moins verbeux, plus compact, Oracle veut soulager les développeurs
Oracle a confirmé hier la disponibilité de Java 14. Les nouveautés visent principalement à améliorer la productivité des développeurs. Concrètement cela se traduit par la simplification de la syntaxe utilisée dans OpenJDK.
La dernière mise à jour du langage et de la plateforme de programmation Java 14, aussi connue sous le nom d’Oracle JDK 14, apporte une série de fonctionnalités conçues pour aider les développeurs à coder plus rapidement et plus efficacement. En réalité, il s’agit de le mettre à la page en apportant les mêmes capacités que certains langages presque aussi populaires.
Le dernier Java Development Kit (JDK) comporte des nouveautés standardisées telles que la prise en charge des expressions Switch, de nouvelles API pour JDK Flight Recorder, et une disponibilité étendue du collecteur de déchets Z Garbage Collector pour macOS et Windows.
Les expressions switch étaient accessibles en préversion depuis Java 12, soit mars de l’année dernière. Elles peuvent être utilisées comme une instruction ou une expression. « En fait, nous avons converti l’instruction switch en une expression et l’avons rendue beaucoup plus simple et concise », assure Aurelio Garcia-Ribeyro, directeur exécutif de la gestion des produits plateforme Java chez Oracle. Concrètement, cette fonctionnalité utilise l’opérateur arrow (->) et rend caduque l’instruction break qui servait habituellement à terminer un cas dans l’instruction switch. Dans la nouvelle procédure, seul le code pointé par l’opérateur, à droite d’une ligne donc, est exécuté.
Après une proposition effectuée il y a deux ans, JDK Flight Recorder (JFR) bénéficie de nouvelles API afin de streamer des événements de manière asynchrone. L’objectif est d’améliorer l’accès à des données issues de l’outil de diagnostic des applications Java, intégré dans Java Virtual Machine. Auparavant, il fallait obligatoirement « lancer un enregistrement, l’arrêter, vider le contenu sur le disque dur associé et ensuite analyser le fichier », lit-on dans le manifeste de la proposition d’amélioration JEP 349. Cette méthode n’était pas adaptée au monitoring en continu.
Quant à Z Garbage Collector (ZGC), il s’agit d’un collecteur de déchets évolutif à faible latence. Il apporte une gestion automatique de la mémoire afin de libérer l’espace qui n’est plus utilisé ou non nécessaire à une application. Disponibles depuis deux ans pour les plateformes Linux/X64, les JEP 364 et 365 apportent la prise en charge expérimentale de macOS et Windows.
ZGC bénéficie également d’améliorations de sa stabilité et de ses performances. Il peut également prendre en charge des tas d’une taille allant de 8 Mo à 16 To. A contrario, le collecteur de déchet CMS a été abandonné définitivement. Il y a d’autres propositions en cours pour effectuer cette tâche. Shenandoah est un GC populaire dont il n’est pas fait mention dans cette release.
Vers une simplification de la syntaxe Java
Java 14 apporte également trois fonctionnalités en préversion. Les développeurs peuvent s’essayer au Pattern Matching, disposer de blocs de texte et utiliser la fonctionnalité Records.
Oracle a donc développé la correspondance de motifs pour l’opérateur Java « instanceof ». Celui-ci est utilisé pour tester les types associés à une structure, puis pour les extraire. Les contributeurs se sont fortement inspirés des langages comme Heskell ou C# qui disposent déjà du pattern matching. Il s’agit encore une fois de simplifier l’extraction conditionnelle de composants à partir d’objets. Pour l’instant, cette technique est limitée à l’opérateur « instanceof », mais les contributeurs veulent l’appliquer à d’autres constructions du langage Java, comme les expressions switch.
Records est une syntaxe compacte pour déclarer des classes, et qui réduit la verbosité de ce langage. « Records va éliminer beaucoup de passe-partout qui étaient historiquement nécessaires pour créer des classes », assure Aurelio Garcia-Ribeyro.
Les blocs de texte ne sont pas nouveaux. Ils étaient déjà disponibles en préversion dans Java 13 et reviennent dans Java 14. Ils permettent d’exprimer facilement des chaînes de caractères (strings) qui couvrent plusieurs lignes de code source. « Ils améliorent la lisibilité des strings dans les programmes Java qui indiquent du code écrit dans d’autres langages », affirme Aurelio Garcia Ribeyro.
« Oracle doit donner aux développeurs Java les outils dont ils ont besoin pour évoluer avec le marché », considère Bradley Shimmin, analyste chez Omdia. « Lorsque je regarde ce qu’ils font avec Java 14, ils ajoutent des fonctionnalités qui rendent le langage plus résilient, plus performant et qui rendent les développeurs plus productifs », déclare-t-il.
Bradley ShimminAnalyste, Omdia
Support de Java : Oracle respecte ses engagements
Java 14 comprend également un nouvel outil de packaging. Il permet aux développeurs de packager des applications Java, pour les distribuer dans des formats spécifiques à la plateforme. Cette fonctionnalité est en incubation et est vouée à changer dans sa forme finale.
Parmi les fonctionnalités les plus opaques de cette version, on trouve le « Non-Volatile Mapped Byte Buffers » qui ajoute un mode de mappage de fichier pour le JDK lors de l’utilisation de la mémoire persistante. De plus, les NullPointerExceptions sont plus « conviviales » puisqu’elles décrivent exactement quelles variables sont null. Ces exceptions se produisent lorsqu’un développeur essaie d’utiliser une référence qui pointe vers un emplacement non défini dans la mémoire comme si elle faisait référence à un objet.
L’API Foreign Memory Access permet aux programmes Java d’accéder de manière plus sécurisée à la mémoire située en dehors du tas Java. Pour rappel, le tas est la quantité de mémoire allouée aux applications s’exécutant dans la JVM.
Disponible six mois après la précédente mise à jour, cette nouvelle version de l’OpenJDK respecte le calendrier instauré par Oracle il y a plus de deux ans. L’objectif de cette cadence accélérée est d’obtenir « davantage de composants de taille réduite, plus faciles à déployer et à gérer, qui bénéficient plus rapidement aux développeurs d’applications d’entreprise », vante Manish Gupta, vice-président du marketing d’Oracle pour Java et GraalVM.
Globalement, Oracle veut faire progresser le langage et la plateforme afin qu’il s’adapte le mieux possible aux pratiques modernes de l’IT : les applications dans le cloud, les solutions mobiles et IoT. En 2017, Oracle a cédé Java Enterprise Edition à la fondation Eclipse qui a créé une nouvelle spécification nommée Jakarta EE.
« Quand je pense à Java 14, ce que je vois, c’est qu’Oracle reste non seulement fidèle à ce qu’il avait promis lors de l’acquisition de Sun Microsystems, qui était de ne pas nuire à Java, mais qu’il essaie maintenant de faire évoluer Java de manière à ce qu’il puisse rester pertinent à l’avenir », estime Bradley Shimmin.
Cette démarche n’est pas unique sur le marché. Red Hat a par exemple présenté Quarkus, un framework open source pour le développement de microservices Java containérisés sur Kubernetes et OpenShift.