Anthony Pena, Développeur Web et Staff Engineer chez SFΞIR Nantes, nous partage les nouveautés de Java 19. Cet article est issu de son blog.
La version 19 de Java est sortie : pas de nouveautés à proprement parler, mais différents travaux en preview et incubation avancée.
Meilleurs Pattern Matching des Record
Exemple de code regroupant les nouveautés des JEPS 405 et 427.
La première intègre enfin le matching en profondeur sur les Record. Concrètement, si vous avez un Record qui est composé d'un Record vous pouvez directement extraire ses membres en profondeur. C'est très pratique pour un if
car on évite de multiplier les lignes, mais ça l'est aussi pour un switch
où on évitera d'imbriquer des switch
s, on pourra garder un seul switch
et valider tous les cas sur un seul niveau. On y gagne donc en lisibilité, même si je regrette toujours le choix d'avoir introduit le when
pour définir les valeurs dans ce genres de cas…
Nouvelle manière de gérer les tâches concurrentes
Je regroupe encore 2 JEPS, les 425 et 428. La première vient proposer un nouveau type de thread (les virtual thread) et la seconde une nouvelle manière de gérer plusieurs tâches concurrentes en se basant sur les virtual thread.
Du côté des virtual threads, c'est très simple : on vient proposer des threads qui ne génèrent plus directement des threads au niveau CPU, mais plutôt quelque chose qui se rapproche des goroutines (en Go) et des coroutines (en Kotlin). Des threads très légers gérés par la JVM directement et qui vont utiliser des threads au bon vouloir de la JVM. On peut se dire qu'on perd en contrôle, mais l'idée, c'est plutôt de déléguer à la JVM une tâche qu'elle fait très bien : gérer la partie hardware pour l'exploiter au mieux en fonction de ce dont on a besoin.
Exemple tiré de la JEPS :
Comme avec les Executor
s classiques, on retrouve une factory. On n'a pas à s'occuper du tout de comment sera exécuté notre code, juste, il le sera. Comme par définition les virtual thread se veulent légers, on peut en générer un grand nombre.
Qui dit gérer un grand nombre de tâches, dit qu'on va vouloir gérer les réponses des tâches pour rassembler les réponses et ce n'est pas toujours simple à faire. D'où l'idée de proposer une nouvelle API (attention, elle est en incubation donc sujette à de gros changement dans l'avenir).
Plutôt que créer un nouvel Executor
comme plus haut, on va créer une instance de StructuredTaskScope
, qui va gérer pour nous l'attente des résultats, et nous donner simplement des Future
qu'on pourra traiter. L'idée, plus que de révolutionner la gestion du multi-threading, est de fournir un outil pour faciliter son utilisation, en particulier pour ce qui est de gérer le fait qu'une des tâches peut échouer. En effet, en cas d'échec, on aura une gestion automatique de l'annulation de l'autre tâche.
Conclusion
Côté développeur, on n'a finalement pas grand-chose à se mettre sous la dent avec cette nouvelle version. La seule JEPS qui est intégrée sans drapeau est le support de l'architecture RISC-V (c'est une bonne nouvelle, mais ça ne va pas changer notre quotidien). On voit encore qu'il y a des gros travaux de fonds qui vont amener de belles choses dans le futur, mais ce n'est pas pour cette version 19.
Sources :
- https://openjdk.org/projects/jdk/19/
- https://openjdk.org/jeps/405
- https://openjdk.org/jeps/427
- https://openjdk.org/jeps/425
- https://openjdk.org/jeps/428
A propos de l'auteur Antony Pena :
"Codeur et blogueur le jour et dévoreur de manga la nuit, vous me verrez souvent parler de Java, JavaScript, Typescript, Rust ou de test, parfois un peu (beaucoup) de jeux-vidéos ou de bricolage de console."